Estoy construyendo una aplicación cliente de servidor usando netty y ios, me enfrenta un problema cuando el usuario simplemente apaga WiFi en su dispositivo ios, el servidor de netty no lo sabe. El servidor necesita saber hacer la limpieza para ese usuario y desconectarlo, pero ahora cuando el usuario intenta conectarse de nuevo, el servidor simplemente le dice que ya está en línea.Netty Channel detección cerrada
Respuesta
Si he entendido su problema correctamente: ¿Quieres escuchar canal de cliente cierra eventos en el lado del servidor y hacer algo de limpieza de sesión,
Hay dos maneras de escuchar para el canal de eventos cerró en Netty:
1) Si el controlador de servidor se extiende SimpleChannelHandler/SimpleChannelHandler
, entonces se puede reemplazar el método siguiente y escribir la lógica de limpieza de sesión no
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception;
2) Si sólo tiene acceso a la referencia de canal, entonces se puede g et al canal cerca de futuro y registrar su aplicación de ChannelFutureListener
con su lógica de limpieza de sesión,
ChannelFuture closeFuture = channel.closeFuture();
closeFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
//session cleanup logic
}
});
Comprobar ID de sesión y permitir la renegociación. O puede usar algo como el controlador de cookies. ¿Puedo preguntar fuera de tema: ¿Cómo interactúa su cliente en iOS con el servidor de Netty? (Qué marco se utiliza en el lado del cliente, y lo decodificador/codificador uso?)
Uso IdleStateHandler
puede detectar cuando no hay ninguna solicitud/respuesta en intervalos de tiempo determinados.
- 1. Java Interop - Netty + Clojure
- 2. Channel.isWritable notofication en Netty
- 3. WCF Callback channel fault
- 4. Android Left Right Channel
- 5. Conceptos: Channel vs. Stream
- 6. HTTP muy concurrente con Netty y NIO
- 7. Cliente HTTP asíncrono con Netty
- 8. Force Channel API para sondear
- 9. Go channel vs Java BlockingQueue
- 10. Usando SPDY con Netty
- 11. Netty SslHandler headache
- 12. Netty vs Apache MINA
- 13. ¿Netty Channel.write es seguro?
- 14. Netty y ByteOrder
- 15. agrupación de conexiones en Netty
- 16. Netty SSL Handler Unit Tests
- 17. Consumir Google Channel API en C#
- 18. La ruta SVG no cerrada parece estar cerrada
- 19. ratón detección puntero sobre un Path2D
- 20. Minimal jar netty para applet client
- 21. Priorizar tareas de Netty en ThreadPoolExecutors
- 22. Configuración de Netty con Spring IoC
- 23. ¿Cómo Netty utiliza grupos de hilos?
- 24. sondeo largo netty nio framework java
- 25. Cómo reducir la producción de basura netty?
- 26. Netty SSL: cómo escribir un TrustManager
- 27. Netty: obtener dirección IP remota en messageReceived
- 28. Netty + JMeter, errores al reutilizar la conexión
- 29. NIO - Detectando una conexión cerrada
- 30. Oracle DB: java.sql.SQLException: conexión cerrada
Bueno, he implementado el método channelClosed, y funciona bien cuando el usuario cierra la aplicación, por ejemplo, pero si el usuario simplemente pierde su conexión wifi, este método no se llama. –
, entonces es mejor agregar un IdleStateHandler con un tiempo de espera de lectura óptimo inactivo. Si el usuario está inactivo más de ese tiempo, lo más probable es que se trate de un caso perdido de conexión, por lo tanto, cierre la conexión en IdleStateEvent desde su controlador de servidor. –
En las versiones más recientes de Netty, 'getCloseFuture()' parece ser 'closeFuture()' – childofsoong