我正在用PHP设计一个聊天应用程序。我在php环境中使用nginx。问题是,在连接了几个客户端之后,PHP脚本变得非常慢。
我只有几个(5-10)客户端连接,长时间的投票被设置为30秒。Nginx立即提供静态内容,如图像或样式,但对于PHP脚本,加载几乎需要5秒。我使用XDebug来分析代码,但它告诉我,加载5秒的脚本只需100 is,这是令人困惑的。
我认为php5-fpm会对传入的请求进行排队,这会导致这样的延迟。在使用长轮询时,我应该了解php5-fpm配置吗?我想强调的是,当~5个客户端正在使用聊天时,它变得非常非常慢。
相似的问题:http://forum.nginx.org/read.php?3,198958 (一个长时间运行的PHP脚本阻止所有其他的PHP请求)
这也可能是连接的:http://www.matt-knight.co.uk/2011/concurrent-php-sessions/
发布于 2014-02-24 10:15:11
使用bare php构建实时应用程序不是一个很好的选择,特别是当您需要长轮询时。你可以做一些调整,但迟早(例如在150个连接的客户端),你将不得不改变你的架构。
此外,长轮询还需要对数据库的持续访问,以确定何时发送了用户的新消息。这可能是一个过度,当你有超过5-10个用户,这可能是原因,在5-10客户端,您的服务器开始变慢。
我建议您使用带有socket.io的独立nodejs服务器作为实时应用程序,它的工作性能很好,并且可以在同时连接上进行数千次连接,没有问题。它包含很好的配置选项,它还支持基于连接客户端功能的websockets或长轮询。
你可以看看socket.io
另外,为了将消息(推送内容)从php发送到node.js服务器到node.js服务器,您可以使用elephant.io库
发布于 2014-02-28 17:07:29
也许您的PHP配置中没有足够的工作人员。在设置我的php-fpm配置时,我通常遵循这个规则,使用动态pm配置,而不是静态配置:
pm = dynamic
pm.max_spare_servers = total cpu cores
pm.start_servers = (0.25 * total cpu cores)
pm.min_spare_servers = (0.5 * total cpu copres)
pm.max_children = 64 pm.max_children这个数字越高,它消耗的内存就越多,但是可以处理的并发连接越多。如果您的内存不足,您应该考虑降低pm.max_chidren并切换到动态pm而不是静态。
如果您选择按需模式设置pm,而不是usualy,则为了使您的长轮询工作顺利,请确保此值足够高:pm.process_idle_timeout = 45s; i通常将其保留在默认的10s,但您应该尝试30分钟,这样就可以假设您的投票窗口是30。
有关如何配置PHP的更多信息,可以在以下地址查看正式文档:http://php.net/manual/en/install.fpm.configuration.php
https://serverfault.com/questions/577736
复制相似问题