Longpolling对服务器的影响

时间:2014-03-05 19:09:14

标签: apache nginx long-polling php

我目前正在while(true)循环中执行一个longpolling脚本。 PHP set_time_limit设置为0.有一个apache服务器,另一个nginx服务器代理前一个。我通过这个longpolling脚本从MySQL表中提取文本。我想知道这个过程是否会妨碍服务器性能。如果是,那么如果有大量并发用户提取数据的程度如何?我应该把nginx放在php-fpm上吗?

1 个答案:

答案 0 :(得分:1)

长轮询有一些值得注意的服务器端属性

  • 在具有专用工作线程的服务器上,它将阻止工作人员
  • 在基于事件的服务器上,它不会阻止服务器中的任何内容
  • 在任何情况下,它都将使用一个或多个套接字,这也是一个有限的资源
  • PHP解释器使用专用工作程序,因此每个并发轮询都会阻止PHP实例
  • 在许多安装中,PHP实例仅受可用RAM的限制
  • 如果轮询脚本正确完成,则上下文切换和CPU将主要保持在雷达之下

从这开始(假设您使用的是生产级Apache MPM,而不是基于实验事件的MPM),将长轮询处理切换到Nginx将

  • 释放一些Apache工作人员,而不会导致(基于事件的)Nginx中的阻塞
  • 可能会增加RAM使用率:如果使用apache-mod-php5运行,PHP解释器的静态RAM占用空间将仅在每个进程中发生一次

我的建议是首先进行一些分析和分析:有多少并发长轮询器同时运行? Apache是​​否会耗尽工作人员(而且你不能轻易增加计数)?您是否可以轻松地将长轮询移植到完全基于事件的解决方案(例如节点)?

如果有疑问,我倾向于把事情放在一起,所以如果你的主要应用程序在Apache内部运行,那么移动长轮询者需要有充分的理由来说服我 - 请理解,这最后一部分只是个人偏好。< / p>