Linux中TCP断开等待时间
- 以阿里云服务器CentOS系统为例
- tcp如何保持长时间连接不断开
以阿里云服务器CentOS系统为例
查看 /proc/sys/net/ipv4/tcp_fin_timeout中的数值,默认为60秒
60
可以修改这个值
修改为20,并查询
netstat
常用命令格式
参数含义:
-a 显示所有
-n 以ip形式显示当前建立的有效连接和端口
-u 显示UDP协议
-t 显示TCP协议
-p 显示对应PID与程序名
tcp如何保持长时间连接不断开
TCP KeepAlive机制 的作用 是检测连接的有无(死活),但无法检测连接是否有效,如断网的时候。“连接有效”的定义 = 双方具备发送 & 接收消息的能力
KeepAlive机制无法代替心跳机制,需要在应用层 自己实现心跳机制以检测长连接的有效性,从而高效维持长连接
综合主流移动IM产品,此处建议心跳检测时间 为4分钟
swoole中 如果想保持长时间连接(中间没有数据交互)不断开 , keepAlive不要打开,应用层实现心跳检测 heartbeat_check 即可
因为(Keep-Alive机制不会强制切断连接,如果连接存在但是一直不发生数据交互。Keep-Alive不会切断连接。而应用层实现的心跳检测 heartbeat_check 即便连接存在,但不产生数据交互的情况下,依然会强制切断连接。)
$serv->set(array(
‘heartbeat_check_interval’ => 120,
‘heartbeat_idle_time’ => 240,
));
上面的设置就是每120秒侦测一次心跳,一个TCP连接如果在240秒内未向服务器端发送数据,将会被切断。
所有为了保持长时间不断开,web端需要实现心跳,即如果没数据发送到服务器,每隔120秒向服务器发送空数据。