尽管在 PHP 上工作了这么久,最近才知道长轮询,否则我就是定期发送 ajax。
据了解,发送定期ajax会消耗带宽(考虑到站点有数千个用户的情况)。服务器仍然忙于服务定期的 ajax 请求。
长轮询的优点是,它会大大减少带宽,因为只有当有变化时,ajax 才会响应,除非 ajax 保持打开状态。然而,服务器需要继续工作(类似于 while 循环,直到出现错误条件),直到发生一些更改。
我的问题是,在这种类型的技术中,服务器必须承受负载。当有数千次使用时,它不会影响周期性ajax的say方式吗?
抱歉,如果我错了。
最佳答案
当您说“负载”时,让我们考虑一下带宽、CPU 时间和其他资源。
带宽
正如你所说,周期性的ajax会消耗带宽。每次轮询都会有一个 HTTP 请求-响应对,即使服务器的响应基本上是空的。通过长轮询,服务器不会响应,除非它有话要说。这是您节省带宽的地方。
CPU
如果您的长轮询实现在服务器端使用 sleep(),则不会使用很多 CPU 周期。
对于 PHP:
请注意,一般来说,只要您想在软件中延迟,就应该使用类似 sleep() 的函数。不要使用没有 sleep() 的紧密循环来实现定时延迟。
其他
根据服务器的配置,每个事件用户可能会使用一个进程或线程。即使在 sleep 时,该进程或线程也会消耗一些资源,包括任何分配的内存。除非您谈论的是大量并发用户,或者您的应用程序每个用户在服务器上使用大量内存,否则您不太可能遇到硬件限制。您可能首先会遇到线程或进程数量的软配置限制。
因此,如果您的应用程序为每个事件用户保留大量内存,那么与定期 AJAX 实现(为每个 AJAX 分配和释放资源)相比,长轮询可能会使您的用户受到内存限制。打。如果设计良好,这应该不是问题。
关于javascript - 长轮询和服务器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19583976/