|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
欢迎大家来到仓酷云论坛![size=14.4444446563721px]TCP一般的断开,通讯两边(办事端和客户端)都是能晓得的。可是非一般的断开,好比间接拔失落了网线,就只能靠以下两种***,完成短工夫内的检测。
[size=14.4444446563721px]一,心跳包机制
[size=14.4444446563721px]心跳包机制,是网游计划中的经常使用机制。从用户层面,本人发包往判别对方连线形态。能够依据情形,很天真的利用。好比,20秒发送一个最小的数据包(也能够依据实践情形稍带一些其他数据)。假如发送没有回应,就判别对方失落线了。
[size=14.4444446563721px]二,使用tcp_keepalive机制
[size=14.4444446563721px]使用TCP的机制,经由过程设置体系参数,从体系层面,监测tcp的毗连形态。以下为linux下的***:
[size=14.4444446563721px]1,起首检察体系tcp_keepalive相干参数(centos和Ubuntu)
[size=14.4444446563721px]#sysctl-a|greptcp_keepalive
[size=14.4444446563721px]显现以下:
[size=14.4444446563721px]
[size=14.4444446563721px]net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9
net.ipv4.tcp_keepalive_time=7200
[size=14.4444446563721px]分离说一下这三个参数:
[size=14.4444446563721px]tcp_keepalive_time参数:
[size=14.4444446563721px]是指TCP发送keepalive动静的频度,默许为7200秒,也就是两个小时。
[size=14.4444446563721px]keepalive_intvl参数:
[size=14.4444446563721px]当探测没有确认时,从头发送探测的频度。默许是75秒。
[size=14.4444446563721px]keepalive_probes参数:
[size=14.4444446563721px]在认定毗连生效之前,发送几个TCP的keepalive探测包。默许值是9次。
[size=14.4444446563721px]--------------------------------------------------------------------
[size=14.4444446563721px]2,修正体系的tcp_keepalive相干参数
[size=14.4444446563721px]在晓得以上三个体系参数的界说和感化以后,我们来修正一下这三个参数:
[size=14.4444446563721px]修正/etc/sysctl.conf文件:
[size=14.4444446563721px]#vi/etc/sysctl.conf
[size=14.4444446563721px]在翻开的文件中,到场以下三行:
[size=14.4444446563721px]net.ipv4.tcp_keepalive_intvl=1
net.ipv4.tcp_keepalive_probes=1
net.ipv4.tcp_keepalive_time=5
[size=14.4444446563721px]保留文件。
[size=14.4444446563721px]--------------------------------------------------------------------
[size=14.4444446563721px]3,重启办事器。
[size=14.4444446563721px]#reboot
[size=14.4444446563721px]附注:大概一时使体系设置失效也行:#sysctl-p
[size=14.4444446563721px]
[size=14.4444446563721px]--------------------------------------------------------------------
[size=14.4444446563721px]4,修正步伐代码局部。
[size=14.4444446563721px]注重:仅仅设置内核参数是不敷的,还必需在编程的时分设置套接字的选项,挪用函数是
socket.setsockopt(level,optname,value)
示例:
level为SOL_SOCKET的话,选项为SO_KEEPALIVE,值为布尔。
[size=14.4444446563721px]socket.setsockopt(socket.SOL_SOCKET,socket.SO_KEEPALIVE,True)
[size=14.4444446563721px]
[size=14.4444446563721px]别的还能够设置TCP选项(设置的level为SOL_TCP而不是SOL_SOCKET)掩盖体系全局设置
TCP_KEEPCNT与tcp_keepalive_probes对应
TCP_KEEPIDLE与tcp_keepalive_time对应
TCP_KEEPINTVL与tcp_keepalive_intvl对应
[size=14.4444446563721px]
[size=14.4444446563721px]--------------------------------------------------------------------
[size=14.4444446563721px]自创文章:
[size=14.4444446563721px]http://blog.sina.com.cn/s/blog_a2d4803001013hrk.html
[size=14.4444446563721px]http://blog.chinaunix.net/uid-23849526-id-274740.html
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们! |
|