Longpolling对服务器的影响

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

长时间轮询有几个值得注意的服务器端属性

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

从这个工作(假设你使用生产级的Apache MPM,而不是基于事件的实验MPM),将长时间轮询处理切换到Nginx

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

我的建议是先做一些分析和分析:多少个并发的long-pollers真的同时运行? Apache是​​否耗尽了工作人员(并且不能轻易增加计数)? 你可以轻松将长期轮询移交给完全基于事件的解决方案(例如节点)吗?

如果有疑问,我倾向于把东西放在一起,所以如果你的主应用程序在Apache内部运行,那么移动长轮询就需要很好的论据来说服我 – 请理解,这最后一部分只是个人偏好。