Netty Channelclosures检测
我正在使用netty和ios构build一个服务器客户端应用程序,当用户在他/她的ios设备上closuresWiFi时,我面临一个问题,netty服务器不知道这个问题。 服务器需要知道要为该用户进行清理并将其设置为离线,但是现在当用户再次尝试连接时,服务器只是告诉他他/她已经在线了。
如果我正确理解你的问题:你想在服务器端监听客户端通道closures事件,并做一些会话清理,
在Netty中有两种方式来监听频道closures事件:
1)如果你的服务器处理程序扩展了SimpleChannelHandler/SimpleChannelHandler
,那么你可以重写下面的方法,并在那里写你的会话清理逻辑
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception;
2)如果你只有通道引用的访问权限,那么你可以获得通道closures未来,并注册你的会话清理逻辑ChannelFutureListener
的实现,
ChannelFuture closeFuture = channel.closeFuture(); closeFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { //session cleanup logic } });
使用IdleStateHandler
您可以在给定的时间间隔内检测何时没有请求/响应。
检查会话ID并允许重新协商。 或者你可以使用cookie控制器。 我可以问一个问题:你的ios客户端如何与netty服务器交互? (你在客户端使用什么框架,以及什么解码器/编码器使用?)