【问题标题】:How to deal with network drops and Indy IdTCPServer如何处理网络掉线和 Indy IdTCPServer
【发布时间】:2011-03-21 14:33:32
【问题描述】:

我已经使用 IdTCPServer 组件创建了一个客户端/服务器应用程序。客户端在应用程序的整个生命周期内连接并保持持久连接。如果网络连接断开(这种情况经常发生,因为客户端使用无线网络卡连接),客户端将自动重新连接。这一切都很好。

我的问题是处理与丢失连接对应的服务器上的套接字。他们不会检测到网络丢失并自行断开连接。在阅读了几篇相关文章后,我了解到服务器无法知道连接是否断开。它必须等待某个事件才能发现这一点。

所以我的问题是,我是否应该在我的服务器中构建一些机制来定期“处理”连接断开的套接字?如果是这样,怎么办?我认为一种方法是循环遍历所有连接并尝试向它们发送数据。我发现这会触发所需的“事件”。

【问题讨论】:

    标签: delphi tcp indy10


    【解决方案1】:

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

    (如果服务器只是简单地使用socket连接将数据发送回客户端,服务器无法知道客户端是否收到了数据。数据可能在中间的某个地方。)

    【讨论】:

    • 好点。事实上,我保留了每个连接的最后一个心跳。而且我可以按照您的建议轻松构建逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多