Estaba usando netty example codes - telnet packet, ahora el código puede establecer el servidor y el cliente para chatear usando telnet, pero el cliente solo puede hablar con el servidor. Lo estoy reescribiendo para que los clientes puedan hablar con todos los clientes, por lo que debo mantener una lista de canales, de modo que cuando un cliente se contacte con el servidor, el servidor pueda enviar el mensaje a todos los clientes. ¿Alguien puede decirme cómo puedo obtener el canal de todos los clientes? (El código de ejemplo es enter link description here)Netty: cómo obtener todos los canales de clientes?
Respuesta
En el evento channelConnected, agarra el cliente desde el ChannelHandlerContext y almacenarlo en algún lugar (una colección concurrente sería bueno, como ConcurrentHashMap). También deberá implementar el método channelClosed para eliminar el canal desconectado de su colección.
Gracias, lo he probado al principio, pero fallado ya que no sé si la implementación ChannelPipelineFactory genera el Handler, al construir un almacenamiento para los canales en la posición correcta, tengo éxito en hacerlo.De todos modos, muchas gracias :) – chentingpc
La propuesta de Mauricio es buena. Además, Netty API ya proporciona un contenedor de canales en el ChannelGroup. Es seguro para subprocesos y también proporciona varias funciones adicionales, como operaciones de grupo en todos los canales contenidos y eliminación automática de canales contenidos cuando están cerrados. Desde javadoc:
Un conjunto de hilos seguros que contiene canales abiertos y proporciona varias operaciones masivas en ellos. Con ChannelGroup, puede categorizar los canales en un grupo significativo (por ejemplo, en una base por servicio o por estado ). Un canal cerrado se elimina automáticamente de la colección, para que no tenga que preocuparse por la vida ciclo del canal agregado. Un canal puede pertenecer a más de un ChannelGroup.
He aquí un pequeño ejemplo (anula channelConnected de SimpleChannelUpstreamHandler):
ChannelGroup allConnected = new DefaultChannelGroup("all-connected");
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
super.channelConnected(ctx, e);
allConnected.add(e.getChannel());
}
ahora puede enviar mensajes a todos los canales conectados de esta manera:
ChannelBuffer cb = ChannelBuffers.wrappedBuffer("hello".getBytes(Charset.forName("UTF-8")));
allConnected.write(cb);
Por Netty 4/5, hay un ejemplo similar en el javadoc, http://netty.io/4.0/api/io/netty/channel/group/ChannelGroup.html que anula channelActive() en su lugar y también llama al supermétodo _después_ de agregar el canal. –
@StefanL dado el ejemplo en la documentación, ¿cómo puedo obtener el canal del cliente? (en el ejemplo: channelA, channelB ..) – HCarrasko
Por Netty 4.0.X
En la clase principal debe declarar ChannelGroup:
final ChannelGroup channels =
new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
Cuando se conecta un nuevo cliente (Usted debe pasar los canales de objeto en el constructor para que manipulador de clase):
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
channels.add(ctx.channel());
}
para obtener todos los clientes, sólo el trabajo a través de canales objeto :) Si desea repetir que:
for (Channel ch : channels) {
//do something with ch object :)
}
espero que ayude a la próxima generación
- 1. Obtener todos los encabezados de clientes en FastCGI (C/C++)
- 2. Instrucción SQL para obtener todos los clientes sin pedidos
- 3. WCF - fábrica de canales frente a base de clientes
- 4. Eliminar todos los clientes en Magento
- 5. Enviar mensaje signalr de servidor a todos los clientes
- 6. Mandato de envío a todos los clientes conectados
- 7. ¿Puedo transmitir a todos los clientes de WebSocket
- 8. ¿Cómo recoger los comentarios de los clientes?
- 9. Creación del mismo SignalR Hub para todos los clientes
- 10. Netty: obtener dirección IP remota en messageReceived
- 11. Usando SPDY con Netty
- 12. ¿Cómo obtener todos los ID con jQuery?
- 13. Java: ¿cómo obtener todos los subdires recursivamente?
- 14. Cómo obtener clientes Zona horaria en JavaScript?
- 15. Obtener todos los elementos iframe
- 16. Sincronización en tiempo real de los datos de la base de datos en todos los clientes
- 17. Obtener todos los identificadores de una colección
- 18. Canales en Socket.io
- 19. La frecuencia de muestreo de audio depende de los canales?
- 20. Obtener todos los elementos de un ArrayAdapter
- 21. Medición del rendimiento de los clientes
- 22. Cómo escribir un Netty Client de alto rendimiento
- 23. ¿Cómo veo los canales RSS como XML formateado?
- 24. ¿Cómo transmitir malas noticias a los clientes?
- 25. ¿Cómo obtener la lista de todos los servicios bonjour anunciados en todos los dominios disponibles?
- 26. ¿Cómo Netty utiliza grupos de hilos?
- 27. Obtener todos los datos de la postulación
- 28. springframework obtener todos los encabezados de solicitud
- 29. jqGrid obtener todos los identificadores de
- 30. Cómo obtener una lista de clientes conectados en SignalR
¿Se las arregló para obtener todos los canales de clientes correctamente? –