将更快的轮询频率陷入我的页面

  • 本文关键字:频率 javascript polling
  • 更新时间 :
  • 英文 :


所以我有一个Rails应用程序(在这种情况下,它似乎无关紧要,但无论如何我都会提到它)。这是一种聊天室应用程序。

为了判断哪些用户当前在聊天室中,我一直在使用Javascript轮询。

所以一个简单的

$(function() {
    setTimeout(updateUsers, 15000);
});

其中updateUsers只调用AJAX get请求来提取聊天室中当前的用户数组。

这是我的问题:15秒是一个相当长的时间等待投票。在没有性能问题的情况下,我应该多久做一次?显然,这取决于很多因素,但我想听听这些因素。我在聊天室里收到消息时看到过很多类似的问题,但在用户列表中还没有,这就是我问这个问题的原因。

这取决于很多因素,比如你的基础设施、预期用户的数量等。即使我们有这些数字,也很难说什么是好的超时。

如果你只发送一个带有用户列表的简单JSON数组,我会说用3-5秒的延迟进行实验,然后从那里进行检查。这是一个过早优化的问题——你试图解决一个你还没有的问题。

然而,还有另外两种可能的解决方案:

您只能发送差额。当您进行轮询时,您会返回一条消息,说明自上次轮询以来哪些用户已连接,哪些用户已离开。这需要某种服务器跟踪,但可以做到。

另一种解决方案是完全不使用轮询,而是使用更现代的技术,如WebSockets/Long轮询。这将允许服务器本身向您的客户端发送消息。因此,当他们连接时,你可以向他们发送一个初始列表,每次其他人连接/离开时,你都可以发送一条最小的消息。在Node环境中,一个很好的解决方案是Socket.IO。我不太喜欢Ruby,所以我不知道是否有人做过类似的事情,但如果有人把整个事情移植到Rails,我也不会感到惊讶。四处搜索,我相信你会找到适合你需要的东西。

任何更频繁的操作都会增加额外的负载,无论是服务器、客户端还是两者。

话虽如此,我不认为有"甜蜜点"(你指的似乎是这个)。然而,您可以查看Ruby Push API,它基本上在任何时候都保持连接打开,并仅在必要时发送数据。(进一步搜索后,似乎还有一个Juggernaut插件。)

我认为你应该使用一些彗星技术

http://en.wikipedia.org/wiki/Comet_(编程)

或者添加一些函数来查找平均响应时间并动态更改间隔。也许服务器可以告诉客户端"我有很多事情要做,请等待30秒,直到下一个请求"。

相关内容

  • 没有找到相关文章

最新更新