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

1 投票
1 回答
809 浏览
提问于 2025-04-17 14:38

我最近被“招募”来帮忙做一个网站项目,这个项目现在是用PHP和Apache服务器写的。我们想要加一个实时聊天功能(或者至少是接近实时的聊天功能)。可扩展性是一个很重要的问题,而这类工作并不是我平常做的。

我看到的关于创建这种聊天功能的资料都提到需要用到“长轮询”,这样服务器才不会很快被压垮,导致崩溃。用PHP和Apache来实现这个功能并不太合适,所以我开始考虑一些其他的选择,比如Twisted Python。

这个网站大概有7000行PHP代码(也就是说,要想完全换成其他语言是相当困难的),所以我想问问,在尝试整合Python和设置一个单独的服务器时,我该如何处理这个情况?或者说,这样做是不是很糟糕?有没有其他更合适的选择?(可惜我找到的很多PHP Comet或者AJAX的解决方案根本无法扩展。需要注意的是,Apache服务器并不是必须的;不过,任何使用的服务器都必须能和PHP、Python等兼容,最好不要用不同的服务器。)

谢谢你的帮助!

1 个回答

2

我会在服务器上用Tornado来写聊天应用。客户端和服务器之间的通信可以通过websockets来实现。如果你在客户端使用SockJS,还可以通过长轮询来支持一些老旧的浏览器。用Tornado写的聊天客户端有很多例子,非常容易上手,而且扩展性很好。像这样的聊天服务器可以同时服务成千上万的用户,而不会让CPU负担过重。

这里有一个例子,可能有点过于复杂,https://github.com/diggidanne/websocket-chat/blob/master/server.py

撰写回答