频繁的轮询是否会超载服务器?如果是这样,实施实时更新的最佳方式是什么?

nik*_*iko 6 javascript php ajax

好吧,我不知道哪种方法最有效.有人可以帮助我找到更好的算法.

好吧,让我们在用户发帖的时候采取像facebook这样的例子,它将更新给他的朋友而不需要任何页面刷新,我们通过ajax请求知道它.但我们怎么知道有人发布了新的东西呢?可能就像每2秒钟放一个计时器并发送一些表的ajax请求并检查某些用户是否发布了某些内容.但有没有办法没有设置计时器,因为每2秒执行一次操作可能会导致严重的服务器问题我是这么认为的?只是想知道是否有更好的方法而不是设置计时器?

任何帮助是极大的赞赏.

Nad*_*far 9

目前Facebook和谷歌采用的是一种称为长轮询的技术.

这是一个简单的系统,客户端向服务器发出AJAX请求.服务器接收请求并检查它是否具有请求所需的数据.如果不是,则请求保持打开但由服务器延迟.第二个服务器有数据,请求被处理并返回给客户端.

如果你打开Facebook,你会看到发布到Facebook的请求大约需要55秒才能完成.同样适用于Gmail和其他一些似乎有某种推送系统的网络应用程序.

以下是如何处理这些请求的简单示例:

  1. 客户:

    • 有初始的AJAX请求 timestamp 0
  2. 服务器:

    • timestamp 0通过检查服务器上数据的时间戳来比较请求.让我们说服务器上的数据有timestamp 234.
    • 客户端戳记与服务器数据上的当前戳记不同,因此我们返回新数据.
  3. 客户:

    • 客户端获取数据并立即发布新的AJAX请求timestamp 234.
    • 然后我们处理新数据并适当更新网页.
  4. 服务器:

    • 将请求与timestamp 234服务器上数据的当前标记进行比较.
    • 邮票价值是相同的,所以我们去睡觉.
    • 服务器数据现在是更新和戳记值timestamp 235.
    • 睡眠请求被唤醒并返回更新值.

您可以阅读更实际更新的现代机制的更深入的解释.