-1

我有超过 50 个客户端连接到一台服务器(低端服务器,运行 windows 2003 服务器),每次出现电源故障或开关故障时,客户端都会断开与服务器的连接,在此事件期间服务器可能会保持打开状态(如果电源备份已安装),当客户端返回时,它们会自动检测服务器并启动连接过程,此时服务器将开始向客户端发送相关数据。在这一点上,您意识到一些客户端将开始冻结,因为服务器速度不够快,无法发送数据,因此它会阻止其余客户端。

我已经实现了一种粗略的方法来控制这个客户风暴,但我在问那里的人是否有更好的算法来执行这种任务。

注意:我在 delphi 应用程序上使用 Asta 套接字组件,但我不介意来自不同领域的示例,

4

3 回答 3

1

与网络冲突检测协议类似,也许客户端在启动时启动连接之前可以等待一段随机时间?

于 2008-12-16T04:41:12.210 回答
0

除了不来梅建议的随机启动延迟之外,在您的协议中实现某种“太忙;稍后再试”消息。对于 50、100 甚至 1000 个客户来说,用短消息拒绝客户应该不是问题。让客户端通过随机延迟和重试+指数退避来响应。

于 2008-12-16T04:45:42.933 回答
0

解决方案也取决于您的偏好。您可以下拉连接请求或发送忙碌消息吗?另一种选择是您开始以循环方式向客户端发送数据。为此,您可以让不同的线程负责将数据发送到不同的客户端。这种情况的优点是没有一个客户会挨饿。

于 2012-03-03T10:19:16.883 回答