AsyncTcpConnection异步链接tcp服务端的问题

mazhaozi

C++服务端
连上发送数据过来
AsyncTcpConnection单纯接受数据 什么操作都没有 单纯测试用
服务端短时间断开 AsyncTcpConnection reConnect 可以重连

如果服务端长时间没发送数据 重启服务端
worekrman程序的AsyncTcpConnection 不自动重连了
worekrman也跟着重启正常接收

应该是哪里的问题

3419 1 1
1个回答

walkor

workerman手册有反复强调,长连接必须要加心跳维持连接存活。心跳目的是避免连接由于长时间不活跃被中间路由节点清理而断开。而且这种清理并不会给客户端或者服务端发送fin包(连接关闭通知的包),所以双方(客户端和服务端)不知道连接已经断开。因为连接已经被清理,即使重启了服务端,workerman所在服务器操作系统也不会收到fin包,认为连接还在,workerman也就更无从知晓连接已经断开,所以不会触发onClose,更不会reConnect。

你可以用定时器定时发送点数据给服务端,一方面是避免连接被清理,另外一方面是能探测到对方断电断网异常断连接的情况。心跳间隔最好小于1分钟。

年代过于久远,无法发表回答
🔝