Apache 长轮询对服务器的影响

Apache 长轮询对服务器的影响,apache,nginx,long-polling,php,Apache,Nginx,Long Polling,Php,我目前正在while(true)循环中执行一个longpolling脚本。PHPset\u time\u limit设置为0。有一台apache服务器,另一台nginx服务器代理与前一台服务器连接。我通过这个长轮询脚本从MySQL表中提取文本。我想知道这个过程是否会影响服务器性能。如果是,那么如果有大量并发用户拉取数据,那么拉取到什么程度?我应该把nginx放在php fpm上吗 长轮询有几个值得注意的服务器端属性 在具有专用工作进程的服务器上,它将阻止工作进程 在基于事件的服务器上,它不会阻

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

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

  • 在具有专用工作进程的服务器上,它将阻止工作进程
  • 在基于事件的服务器上,它不会阻止服务器中的任何内容
  • 在任何情况下,它都将使用一个或多个套接字,这也是一个有限的资源
  • PHP解释器使用专用的worker,因此每次并发轮询都会阻止一个PHP实例
  • 在许多安装中,PHP实例仅受可用RAM的限制
  • 如果轮询脚本正确完成,上下文切换和CPU将大部分保持在雷达以下
从这个角度出发(假设您使用的是生产级apachempm,而不是实验性的基于事件的MPM),将长轮询处理切换到Nginx将

  • 释放一些Apache工作人员,而不会导致(基于事件的)Nginx中的阻塞
  • 可能会增加RAM使用:如果使用apache-mod-php5运行,PHP解释器的静态RAM占用在每个进程中只会出现一次
我的建议是首先进行一些分析和分析:有多少并发长轮询器确实并发运行?Apache是否已耗尽工作人员(并且无法轻松增加计数)?您能否轻松地将长轮询移植到完全基于事件的解决方案(例如节点)


如果有疑问,我倾向于将事情紧密联系在一起,因此如果你的主应用程序在Apache内部运行,那么将长轮询器移出需要很好的理由来说服我-请理解,这最后一部分只是个人偏好。

你所说的基于事件的服务器是什么意思?@nick:基于事件的服务器(例如node.js、nginx)没有针对每个连接的专用工作进程或线程