我的TCP服务器使用netty。情况是:当客户端连接到服务器时,我将客户端的ip保存在全局变量(例如Map)中;当客户端断开连接时,我将从地图中删除IP。
我在SimpleChannelHandler中使用了channelConnected()和channelDisconnected()方法。但我的问题是,当我认为客户端断开连接时(某些时候计算机关闭或客户端进程关闭),有时channelDisconnected()方法无法捕获事件或者其他一些情况......)你能给我一些建议。
答案 0 :(得分:0)
只需使用DefaultChannelGroup,它会在关闭时自动从中删除频道。
另外,您可以将ChannelFutureListener注册到Channels close future以从地图中删除。 像这样:
channel.getCloseFuture().addListener(new ChannelFutureListener() {
public void operationCompleted(ChannelFuture f) {
map.remove(f.getChannel());
}
});