Tcp服务端检测到连接断开,如何判断是对端崩溃掉线,还是中间路由断线(或对端主机断电等)?
小_鱼 2017-12-29 02:52:11 前几天某某云机房跨国网络调整,有断网操作。我们的服务器居然能检测到网络断开。。(recv返回-1,错误码WSAECONNRESET。没有加心跳包)
按照我的理解,tcp连接中间的网络断开,server和client都应该检测不到的呀
这就比较尴尬了,我们是IM服务,IM server检测到网络端开需要判断是中间网络断开(本想通过应用层心跳包判断),还是client端(IM 代理节点)崩溃。
中间网络断开:IM server上来自IM代理节点上的用户信息不会立即删除,等待IM代理节点重连。同时连接在IM代理节点上的用户将不会感知到网络断开。
IM代理节点崩溃:IM server将清除该代理节点上相关信息。同时连接在IM代理节点上的用户将会感知到。