0

尽管在 PHP 上工作了这么久,但最近才知道长轮询,否则我会定期发送 ajax。

据了解,发送周期性 ajax 会消耗带宽(考虑站点有数千个用户的情况)。以及服务器仍然忙于服务定期 ajax 请求。

长轮询的优点是,它仅在发生更改时才大幅减少 ajax 响应的带宽,除非 ajax 保持打开状态。然而,服务器需要继续工作(直到出现错误情况的那种 while 循环),直到发生一些变化。

我的问题是,在这种技术中,服务器必须承受负载。当有成千上万的用途时,它不会影响定期ajax的说法吗?

对不起,如果我错了。

4

1 回答 1

3

当您说“负载”时,让我们考虑带宽、CPU 时间和其他资源。

带宽

正如您所说,定期ajax 会消耗带宽。每次轮询都会有一个 HTTP 请求-响应对,即使来自服务器的响应基本上是空的。通过长轮询,服务器不会响应,除非它有话要说。这是您节省带宽的地方。

中央处理器

如果您的长轮询实现在服务器端使用 sleep(),它不会使用很多 CPU 周期。

对于 PHP:

请注意,通常,您应该在任何时候想要延迟软件时使用类似 sleep() 的函数。不要使用没有 sleep() 的紧密循环来实现定时延迟。

其他

根据服务器的配置,每个活动用户可能会使用一个进程或线程。即使在睡眠时,这个进程或线程也会消耗一些资源,包括任何分配的内存。除非您正在谈论大量同时用户,或者您的应用程序在每个用户的服务器上使用大量内存,否则您不太可能遇到硬件限制。您可能首先遇到线程或进程数的软配置限制。

因此,如果您的应用程序为每个活动用户持有大量内存,那么与定期 AJAX 实现相比,长轮询可能会使您的内存受限,用户数量少于每次 ajax 命中分配和取消分配资源的定期 AJAX 实现。有了好的设计,这应该不是问题。

于 2013-10-25T08:27:26.660 回答