1.首先TCP是长连接,连接后正常情况下是不会无故断开的,但是由于路由,以及防火墙等原因的存在,会踢出长时间没有数据交换的连接,所以要有一个保活机制,发送心跳包
或者设置
e.AcceptSocket.IOControl(IOControlCode.KeepAliveValues, _keepAliveOptions, null);
2.
a.在连接没有关闭的情况下客户端异常退出,服务端还要维持这样一个连接就比较浪费,所以要踢出;
b.踢出几分钟内没有交互的连接
问题:如何去理解这两种关系??
------解决思路----------------------
正常都应该按2的规则来办事
但是有特殊情况,需要服务器不停推送数据,而客户端几乎不发送数据给服务端
但是客户端长时间不发送数据又会自动断开,导致推送失败,所以不得已加个心跳让客户端不要断开连接