【问题标题】:Is this server polling considered too aggressive?此服务器轮询是否被认为过于激进?
【发布时间】:2019-03-13 17:40:19
【问题描述】:

在我浪费任何钱之前,我需要更多经验的指导。请看我的场景。

  • 300 个客户端需要检查来自服务器的数据 全天。
  • 每个客户的数据将在不同的未知时间可用。
  • 每个客户端每天最多可以下载 30 次 5kb 的数据。
  • 重要的是每个客户在 5 分钟内检测到他们的可用数据。

我不想强制每个客户端设置静态 IP 或开放端口。因此,我相信 将数据从服务器发送到客户端不是一种选择。我必须想出最合适的方式让客户端从服务器请求数据。

我考虑过设置 300 个客户端每 3 到 5 分钟轮询一次可能的数据。每个客户端每天最多可以下载 30 次 5kb 的数据。他们不会在每次投票时下载数据。

假设带宽和速度不是问题,并且我可以获得可升级的专用服务器;

  1. 每 3 到 5 分钟同时连接 300 个客户端是否被视为激进轮询?
    • 预计每个客户端每天最多可下载 30 次 5kb 数据。
  2. 这种方法在网络和硬件资源方面是否不合理?
  3. 有更好的方法吗?

感谢您的宝贵时间。

【问题讨论】:

  • 如果你使用.NET框架,你可以考虑SignalR。或者一般来说,看看像 WebSockets 这样的服务器推送技术。我认为轮询可以是一个可以接受的解决方案,而且很容易实施。对于你的用例在你的环境中是否合理,真的只能通过测试来回答。

标签: c# web-services client-server polling


【解决方案1】:

一点也不激进,每 3 到 5 分钟有 300 个客户端(假设它们按时间均匀分布)是每秒 1.6 个请求(3 分钟)或每秒 1 个请求(5 分钟),这没什么吞吐量。

考虑到每个客户端仅传输(最终)5KB 的数据,这对硬件来说不是什么大问题,或者会在任何地方造成瓶颈。

如果从服务器推送不可行,那么您考虑采用的方法是可以的。

一种替代方法是使用“队列”,例如来自 Azure 服务总线的主题/订阅。这对于这样一个简单的场景来说太过分了,但是,它在服务(服务器)和几乎实时工作的客户端之间提供了一个“适当的”可靠的异步通道,而且好处是您将推迟所有过载以保持为此目的设计的平台的通信模式。

【讨论】:

  • 感谢耶稣的洞察力。听起来这在合理的环境下应该是可以实现的。
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 2019-11-20
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多