2013-02-03 14 views
1

我已经被“招募”了,可以这么说来帮助开发目前用PHP服务器编写的PHP项目。我们希望集成一个实时(或至少非常接近它)的聊天功能。可扩展性是一个确定的问题,这种类型的工作绝对不是我的典型。如何将可扩展的长轮询服务器与PHP集成?

我读过的关于创建这种聊天功能的一切都需要使用“长轮询”,这样服务器不会迅速超负荷运行,而且会崩溃。 PHP和Apache不利于实现这样的功能,因此我已经探索了一些替代方案,例如Twisted Python。

该网站有约7,000行PHP(即,它很难只是直接切换语言的整个事情),所以我的问题是我怎么能管理这种情况,尽量试图将Python和设置一个单独的服务器?或者,这是否是一个非常糟糕的方式来做到这一点?是否还有其他替代方案更适合? (遗憾的是,我发现许多PHP Comet,甚至AJAX解决方案都没有丝毫扩展,请注意,Apache服务器不一定是必需的;但是,任何使用的服务器都必须使用PHP和Python等,有独立的服务器。)

感谢您的帮助!

+0

对不起,这可能不是有用的评论,但到底是什么的可扩展性是什么意思? –

+0

如果说该网站有10个用户同时聊天,而1,000用户与5000等等。从我的理解来看,Apache将耗尽工作线程,并且PHP不适合在任何重要的情况下打开HTTP请求卷。 – JohnZ

+0

那么可剥离性就意味着有效? –

回答

2

我会在服务器上使用Tornado来编写聊天应用程序。客户端服务器通信可以通过websocket完成。如果您在客户端使用SockJS,则还可以通过长轮询来支持较旧的浏览器。有很多使用Tornado编写的示例聊天客户端。开始非常简单,而且具有极好的可扩展性。像这样的聊天服务器可以为数千个客户端服务,而不会显示任何明显的CPU活动。

这是一个例子,可能有点过工程https://github.com/diggidanne/websocket-chat/blob/master/server.py

+0

刚开始尝试使用Tornado和websockets。简单但很有帮助的答案。谢谢! – JohnZ

+0

是的,我们使用Tornado来为PythonAnywhere的控制台输出。我们有缩放问题,但没有一个是龙卷风的错。你只需要确保你永远不会在主线程上执行阻塞操作。 – aychedee

相关问题