C++服务端 连上发送数据过来 AsyncTcpConnection单纯接受数据 什么操作都没有 单纯测试用 服务端短时间断开 AsyncTcpConnection reConnect 可以重连
如果服务端长时间没发送数据 重启服务端 worekrman程序的AsyncTcpConnection 不自动重连了 worekrman也跟着重启正常接收
应该是哪里的问题
workerman手册有反复强调,长连接必须要加心跳维持连接存活。心跳目的是避免连接由于长时间不活跃被中间路由节点清理而断开。而且这种清理并不会给客户端或者服务端发送fin包(连接关闭通知的包),所以双方(客户端和服务端)不知道连接已经断开。因为连接已经被清理,即使重启了服务端,workerman所在服务器操作系统也不会收到fin包,认为连接还在,workerman也就更无从知晓连接已经断开,所以不会触发onClose,更不会reConnect。
你可以用定时器定时发送点数据给服务端,一方面是避免连接被清理,另外一方面是能探测到对方断电断网异常断连接的情况。心跳间隔最好小于1分钟。
谢谢
workerman手册有反复强调,长连接必须要加心跳维持连接存活。心跳目的是避免连接由于长时间不活跃被中间路由节点清理而断开。而且这种清理并不会给客户端或者服务端发送fin包(连接关闭通知的包),所以双方(客户端和服务端)不知道连接已经断开。因为连接已经被清理,即使重启了服务端,workerman所在服务器操作系统也不会收到fin包,认为连接还在,workerman也就更无从知晓连接已经断开,所以不会触发onClose,更不会reConnect。
你可以用定时器定时发送点数据给服务端,一方面是避免连接被清理,另外一方面是能探测到对方断电断网异常断连接的情况。心跳间隔最好小于1分钟。
谢谢