如何处理网络中断和Indy IdTCPServer

8
我已经使用IdTCPServer组件创建了一个客户端/服务器应用程序。客户端连接并在应用程序的生命周期内保持持久连接。如果网络连接断开(由于客户端使用无线空卡连接,这种情况经常发生),客户端将自动重新连接。这一切都很好地运作。
我的问题是如何处理与丢失连接对应的服务器套接字。它们不会检测到网络中断并自行断开连接。阅读了几篇相关文章后,我了解到服务器无法知道连接是否已断开。它必须等待某个事件才能找出这一点。
那么我的问题是,我应该在服务器中构建一些机制来定期“处理”具有丢失连接的套接字吗?如果是这样,应该如何实现?我认为一种方法是循环遍历所有连接并尝试向它们发送数据。我发现这将触发所需的“事件”。
1个回答

6

客户端定期向服务器发送某种心跳或ping信号,可以用来保持服务器端会话的活动状态。如果信号停止,并且超时时间间隔过去,服务器可以假定客户端已经失去了连接。

(如果服务器仅使用套接字连接向客户端发送数据,则服务器无法知道客户端是否已收到该数据。数据可能位于中间位置。)


好的观点。目前,我正在保留每个连接的最后一个心跳,并且我可以轻松地按照您的建议构建逻辑。 - M Schenkel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接