javascript - 长轮询和服务器行为

标签 javascript php ajax comet long-polling

尽管在 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/

相关文章:

javascript - 每个字母连接一个字符串

javascript - 使用流结束 NodeJS 程序

javascript - jquery ajax 调用 db 无响应

php - 聊天应用程序的数据库设计

php - 在 CakePHP 中将 id 从自动增量更改为 char 36

javascript - 如何将 $.get 的结果传递给另一个函数的返回

javascript - 在 Browserify 中设置文件的自定义路径

javascript - iron-ajax 点击 URL 给出请求的资源上不存在 'Access-Control-Allow-Origin' header

javascript - AJAX 从保管箱到另一个保管箱更改值

javascript - 如何让 Aurelia 准确匹配路线?