长轮询对服务器的影响

4

我目前正在使用一个while(true)循环内执行长轮询脚本。PHP set_time_limit 已经设置为0。有一个Apache服务器,另外还有一个Nginx服务器代理到前面的Apache服务器。我通过这个长轮询脚本从MySQL表中拉取文本。我想知道如果有很多并发用户在拉取数据,这个过程是否会影响服务器性能。如果是的话,那么对服务器性能会有什么影响?我应该将Nginx用于php-fpm吗?

1个回答

1

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

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

从这个出发(并假设您使用生产级别的Apache MPM,而不是实验性的基于事件的MPM),将长轮询处理切换到Nginx将会

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

我的建议是首先进行一些分析和分析:有多少并发长轮询者实际上同时运行? Apache是否用尽了工作线程(而您无法轻松增加计数)?您能否轻松地将长轮询移植到完全基于事件的解决方案中(例如node)?

如果有疑问,我倾向于保持事物紧密联系在一起,因此,如果您的主要应用程序在Apache内运行,则需要有充分的理由说服我将长轮询移出 - 请理解,这是个人偏好。

事件驱动服务器是什么意思? - nick
@nick:基于事件的服务器(例如node.js,nginx)并不为每个连接提供专门的工作进程或线程。 - Eugen Rieck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接