如何将可扩展的长轮询服务器与PHP集成?

如何将可扩展的长轮询服务器与PHP集成?,php,python,apache,comet,long-polling,Php,Python,Apache,Comet,Long Polling,可以说,我被“招募”来帮助处理一个web项目,该项目目前使用PHP编写,带有Apache服务器。我们想集成一个实时(或者至少是非常接近的)聊天功能。可伸缩性是一个明确的关注点,这种类型的工作肯定不是我的典型工作 我读到的关于创建这样一个聊天功能的所有内容都需要使用“长轮询”,这样服务器就不会迅速过载,甚至崩溃。PHP和Apache不利于实现这样的功能,因此我探讨了一些替代方案,例如TwistedPython 该网站大约有7000行PHP(也就是说,很难在整个网站上直接切换语言),所以我的问题是,

可以说,我被“招募”来帮助处理一个web项目,该项目目前使用PHP编写,带有Apache服务器。我们想集成一个实时(或者至少是非常接近的)聊天功能。可伸缩性是一个明确的关注点,这种类型的工作肯定不是我的典型工作

我读到的关于创建这样一个聊天功能的所有内容都需要使用“长轮询”,这样服务器就不会迅速过载,甚至崩溃。PHP和Apache不利于实现这样的功能,因此我探讨了一些替代方案,例如TwistedPython

该网站大约有7000行PHP(也就是说,很难在整个网站上直接切换语言),所以我的问题是,如果我尝试集成python并设置一个单独的服务器,如何管理这种情况?或者,这是一种非常糟糕的方式吗?还有其他更合适的替代方案吗?(遗憾的是,我发现许多PHP Comet,甚至AJAX解决方案根本无法扩展。请注意,Apache服务器不一定是必需的;但是,所使用的任何服务器都必须与PHP和Python等配合使用,除非有单独的服务器。)


谢谢你的帮助

我会在服务器上使用Tornado来编写聊天应用程序。然后可以通过WebSocket进行客户机-服务器通信。如果在客户端使用SockJS,还可以通过长轮询支持旧浏览器。有很多使用Tornado编写的聊天客户端示例。它的入门非常简单,并且具有极好的可扩展性。这样的聊天服务器可以在不显示任何明显CPU活动的情况下为数千个客户端提供服务


这是一个例子,可能有点过度设计

对不起,这可能不是有用的评论,但可伸缩性意味着什么?如果说该网站有10个用户同时聊天,而1000个用户,而5000个用户,等等。据我所知,Apache将耗尽工作线程,PHP不适合在任何重要的卷中打开HTTP请求。所以可伸缩只是意味着有效?嗯,嗯……嗯。我想说的是,我可以有效地只使用PHP和Apache,并且可以同时为大约50个用户提供有效的聊天,但是我可以同时为1000个用户提供无效的聊天。根据我所阅读的内容,服务器将以这种方式处理相对较少的连接。坦率地说,我假设性能下降是线性的,但是,它可能是指数级的,也就是说,当然,直到服务器崩溃……然后,嗯,没有任何性能或要求。这就是所谓的“问题”。但是,是的,随着用户的增加,这种情况下的需求也会增加。我们刚刚开始试验Tornado和WebSocket。答案很简单,但很有帮助。非常感谢。是的,我们使用Tornado为Pythonywhere的控制台输出服务。我们有过缩放问题,但没有一个是龙卷风造成的。您只需确保从不在主线程上执行阻塞操作。