如何检查我与服务器的连接是否丢失? (无论是客户端还是服务器端) 我正在使用 TCP 连接,并且服务器 recv unlimit 客户端。服务器为每个客户端创建线程。这样我就可以为每个客户接收/发送。
最佳答案
您可以考虑使用 TCP-keepalive option在套接字上作为一种选择。
但是如果在一定时间内没有观察到任何事件,许多 NAT 和有状态防火墙实际上会丢弃 TCP 连接。并且这种事件超时可能比 TCP 支持的周期性保持事件消息更快。出于这个原因,每 30-60 秒向您的服务器发送一条协议(protocol)消息通常足以保持与 NAT 相关的连接“有效”。
我个人的看法是这样的。如果连接需要长时间运行,客户端有责任通知服务器“我还在这里”。服务器应定期唤醒并关闭在过去 N 秒内没有任何流量的任何 TCP 连接。 (其中 N 是您应用的合理值)。在您的情况下,“每个客户端线程”方法意味着每个线程只需要决定远程客户端何时变得无响应。
在该协议(protocol)内,客户端可以每 30-60 秒向服务器发送一次它自己的自定义“ping”消息。服务器始终会返回此消息并记录客户端仍在附近。
我正在讨论的很多内容实际上取决于您的协议(protocol)、您的服务做什么以及连接预计持续多长时间。
关于c++ - 如何检查连接是否丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272491/