长轮询和服务器行为

时间:2013-10-25 07:42:06

标签: javascript php ajax comet long-polling

即使长时间使用PHP,最近也开始了解长轮询,否则我会定期发送ajax。

据了解,定期发送ajax消耗带宽(考虑到网站有数千个用户的情况)。同样,服务器仍然忙于提供定期的ajax请求。

长轮询的优点是,只有在有变化时才会大幅减少带宽,因为ajax只会在有变化时响应,除非ajax保持打开状态。然而,服务器需要继续工作(while循环直到错误状态),直到发生一些变化。

我的问题是,在这种技术中,服务器必须承担负担。当有数以千计的用途时,它会不会像周期性的ajax那样影响?

抱歉,如果我错了。

1 个答案:

答案 0 :(得分:3)

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

<强>带宽

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

<强> CPU

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

对于PHP:

请注意,一般情况下,只要您想延迟软件,就应该使用类似sleep()的函数。不要在没有睡眠()的情况下使用紧密循环进行定时延迟。

其他

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

因此,如果您的应用程序为每个活动用户保留了大量内存,则长轮询可能使用少量用户进行内存限制,而不是定期AJAX实现,该实现为每个ajax分配和释放资源击中。有了良好的设计,这应该不是问题。