我正在使用 netty 和 ios 构建一个服务器客户端应用程序,当用户刚刚关闭他/她的 ios 设备上的 WiFi 时,我遇到了一个问题,netty 服务器不知道它。 服务器需要知道为该用户做清理并将他/她设置为离线,但现在当用户尝试再次连接时,服务器只是告诉他他/她已经在线。
最佳答案
如果我正确理解你的问题:你想在服务器端监听客户端 channel 关闭事件并做一些 session 清理,
Netty 中监听 channel 关闭事件的方式有两种:
1) 如果您的服务器处理程序扩展SimpleChannelHandler/SimpleChannelHandler
,那么您可以覆盖以下方法并在那里编写您的 session 清理逻辑
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception;
2) 如果您只能访问 channel 引用,那么您可以在不久的将来获得 channel 并使用您的 session 清理逻辑注册您的 ChannelFutureListener
实现,
ChannelFuture closeFuture = channel.closeFuture();
closeFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
//session cleanup logic
}
});
关于ios - Netty Channel 关闭检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8785949/