Netty服务器自动识别客户端已断开

最近开发了使用的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

结果真的好使!时间可以自己设置。原理自己查。。

时间: 2024-10-08 01:47:40

Netty服务器自动识别客户端已断开的相关文章

linux 服务器与客户端异常断开连接问题

服务器与客户端连接,客户端异常断掉之后服务器端口仍然被占用, 到最后是不是服务器端达到最大连接数就没法连接了?领导让我测试这种情况,我用自己的电脑当TCP Client,虚拟机当服务器,连接之后能正常通信,每次拔掉网线断开,5次之后就不能连接了(我的服务器设置最大连接数就是5).具体如下:1:用模拟软件Commix模拟TCP Client,连接服务器. 2:用服务器端监听端口1234.重复打开关闭TCP Client的端口,服务器显示如下图所示: 1--5次可以正常连接,5次完成之后出现如下问题

服务器中判断客户端socket断开连接的方法

1, 如果服务端的Socket比客户端的Socket先关闭,会导致客户端出现TIME_WAIT状态,占用系统资源. 所以,必须等客户端先关闭Socket后,服务器端再关闭Socket才能避免TIME_WAIT状态的出现. 2, 在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号. client端通过 pipe 发送信息到server端后,就关闭client端, 这时server端,返回信息给 client

VMware vSphere Client5.0与 Windows8不再有问题,解决VMware 5.0 客户端提示VMRC控制台的连接已断开

问题:VMware 5.0 客户端提示VMRC控制台的连接已断开...正在尝试重新连接,系统是win8的 网上解决办法: WIN8,在安装vmware vsphere client 5.0时出现兼容性问题无法安装.但可以用兼容模式安装. 用兼容模式安装后, 发现无法打开控制台Open Console. 一堆人的解法都告訴我說升級到 5.1 版本就可以了.但是大部分人的服务器上是有数据在跑的,不能轻易换. 后来在一个台湾人的博客上发现: vSphere 5.0 已經在去年 (  2012/12 )

netty 3.9.2 UDP协议服务器和客户端DEMO

说明:基于netty 3.9.2的udp协议实现的(如果你使用的版本是4.X或5.X,请参考其他方法):程序的逻辑结构是,客户端发送给服务端一串数据,服务器端返回给客户端“A”.在进行游戏开发时需要对udp的丢包进行处理,可以利用服务器端的返回值进行相关处理,以确定是否重发,这方面具体没有实现. 文章结构: 一.服务器端 1.UDPServer 2.UdpChannelPipelineFactory 3.UDPServerHandler 二.客户端 1.UDPClient 2.UDPClient

Netty入门(二)时间服务器及客户端

在这个例子中,我在服务器和客户端连接被创立时发送一个消息,然后在客户端解析收到的消息并输出.并且,在这个项目中我使用 POJO 代替 ByteBuf 来作为传输对象. 一.服务器实现 1.  首先我们自定义传输数据对象 1 package com.coder.client; 2 3 import java.util.Date; 4 5 /** 6 * 自定义时间数据类 7 * @author Coder 8 * 9 */ 10 public class Time { 11 private fin

(笔记)Linux服务器中判断客户端socket断开连接的方法

下面来罗列一下判断远端已经断开的方法:(转自http://blog.csdn.net/god2469/article/details/8801356) 法一: 当recv()返回值小于等于0时,socket连接断开.但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接. 法二: struct tcp_info info;   int len=sizeof(in

关于:Centoslinux 远程连接服务器时客户端一直显示:连接已复位,重新连接到(ip)

对于每个linux初学者来说,遇到问题并不可怕,可怕的是你解决不了问题. 在这里分享一个我遇到的一个问题: 当我在用远程连接的时候,起初还好好的,结果在执行了一个yum安装命令之后, 客户端连接就断了,重新连接的时候就出现了如图这种情况. 首先我想到的是会不会是网络连接的问题,但是我客户端ping服务器,服务器ping客户端都是通的,不是这里的问题: 然后我就到虚拟机的服务器端里面去看看,我觉得会不会是防火墙没关,但是关了之后并没有什么作用: 于是乎重新检查了一下客户端的配置文件:vi /etc

远程桌面连接已断开 由于数据加密错误---和本地连接修复错误

远程桌面连接已断开 由于数据加密错误: 进入注册表编辑器窗口,展开"HKEY_LOCAL_MA CHINE\SYSTEM\CurrentCon trolSet\Services\TermService\ Parame ters",找到名为"Cer tificate"的子键,将它删除,重新启动XP系统或Windows 2000 Server服务器,系统就会重新生成"Certificate"子键,这样客户端就能正常连接到终端服务器了.这是因为Cert

【node】node的核心模块---http模块,http的服务器和客户端

http服务器和客户端 node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端,http.Server是一个基于事件的HTTP服务器,他的核心由Node.js下层的C++部分实现,而接口由JavaScript封装,兼顾了性能和简易性,http.request则是一个http客户端工具,用于向http服务发起请求: 创建HTTP服务器 1. http.createServer() //服务器实例 var httpServer = require("ht