轮询或不轮询(在 Web 服务上下文中)

Posted

技术标签:

【中文标题】轮询或不轮询(在 Web 服务上下文中)【英文标题】:To poll or not to poll (in a web services context) 【发布时间】:2009-08-04 15:12:26 【问题描述】:

我们可以使用轮询来了解来自某些来源的更新,例如连接到网络服务器的客户端。 WCF 以双工合同的方式提供了一个漂亮的功能,在其中,我可以维护与客户端的连接,并随意在该连接上进行调用。 办公室里的一些偷窥者正在讨论这两种解决方案的优点,我想就何时最好地使用每种策略获得反馈。

【问题讨论】:

【参考方案1】:

我会使用基于事件的机制而不是轮询。在 WCF 中,您可以按照 Juval Lowy 在其网站IDesign.net 上提供的发布-订阅框架轻松完成此操作。

【讨论】:

【参考方案2】:

部分取决于您拥有多少用户。

假设您有 1,000,000 个用户,您将无法维护这么多会话。

但如果您的系统每秒可以响应 1000 个轮询请求,那么每个客户端可以每 1000 秒轮询一次。

【讨论】:

【参考方案3】:

我认为设拉子做到了这一点,但我还想说两件事。

    我在使用 Duplex 时遇到了问题 合同。你必须拥有所有 你的鸭子排成一排 回调通道......你必须 检查它以确保它是打开的, 等等。 IDesign.net 的东西是 最少数量的管道代码 你必须包括在内。

    如果它对您的解决方案有意义 (这仅适用于某些 情况),MSMQ 绑定允许 客户端向服务发送数据 以异步方式(如 Duplex), 但该服务不是“轮询” 消息...它会在何时收到通知 一个人通过一些进入队列 地下管道。

    这种情况会迫使您转动 周围的交流(客户变成 服务器,服务器成为客户端),但是 如果大部分通信 是单向的,这将提供很多 的好处。另一个优势 这里显然是排队的 通讯——服务器可以 下来,不错过任何消息... 它回来时会捡起来的 在线。

想一想。

【讨论】:

另外:如果您需要与 MSMQ 进行双向通信,则必须分别实现两个端点。该服务将有一个客户端和一个服务,而客户端将有一个服务和一个客户端(这样两者都可以发送和接收消息)。

以上是关于轮询或不轮询(在 Web 服务上下文中)的主要内容,如果未能解决你的问题,请参考以下文章

网络聊天 长轮询或其他方法?

Haskell:在不轮询的情况下监控文件(在 linux 中使用 inotify)

轮询与 AsyncCallback 回调 - 慢速 Web 服务的最佳方法?

Pushlet、长轮询或轮询 - 我应该在我的聊天应用程序中使用哪一个?

如何使用Go建开发高负载WebSocket服务器

如何在不轮询的情况下监视页面的更改?