最近开发了使用的Netty的长连接服务器,客户端支持使用socket和websocket的js连接,也可以使用flash连接。但是遇到一个很麻烦的问题,当客户端的网络断开或因为异常断开的时候,服务器并不能立即自动知道客户端已断开。幸好遇到一个同事,比较熟悉网络,因此帮忙解决了这个问题,特此写在这,希望能帮助使用netty的朋友们。
之前尝试解决问题的时候,看了源码,发现了一个方法:
public class TextWebSocketFrameHandler extends SimpleChannelInboundHandler<WebSocketFrame>{
@Override
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
......//此处对断网进行了处理
}
}
这种方法可以识别浏览器断开的情况,但是网络断开识别不了。然后同事说,linux可以配置网络,试了试。sysctl.conf文件里面设置:
net.ipv4.tcp_keepalive_time = 10
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_intvl = 2
结果真的好使!时间可以自己设置。原理自己查。。
本文出自 “积水成渊” 博客,请务必保留此出处http://xiaochu.blog.51cto.com/1048262/1642061
原文地址:http://xiaochu.blog.51cto.com/1048262/1642061