【发布时间】:2011-12-02 19:30:31
【问题描述】:
我想构建一个支持聊天的多人网络游戏应用程序。我认为应用程序必须同时处理数百个连接。
我计划将我的应用程序托管在共享网络托管中,它有这些限制(很可能类似于PHP + Comet (long-polling) scaling / hosts):
- 看来我无法更改 Web 服务器。很可能它使用的是 Apache。
- 支持 MySQL 5、PHP 5.3.x、Perl、Python、Ruby on Rails、CGI
(更准确地说,我将使用 HawkHost 的共享虚拟主机。)
这是我的研究结果,然后是我的问题:
- 一些资源(如Python Comet Server)说PHP 不适合处理并发连接,而Python 是更好的选择。这是真的吗?
- 我在 PHP 中尝试了长轮询技术(虽然我不知道它是否正确实现,例如 Comet issue with abandoned open connections),使用“无限循环直到数据更改”。方法。这几乎可以工作。剩下的问题是,当浏览器关闭时,服务器进程永远不会死掉(服务器不知道连接已经终止,数据永远不会改变)。 PHP有什么方法可以检测浏览器是否已经终止,从而停止循环?
我一直在四处寻找答案,但仍然无法得出任何结论。这个话题在 StackOverflow 上也被问过很多次了,如果我听起来重复,我很抱歉>.<.>
目前我能够使用 PHP、MySQL 和 JQuery for JS 进行编码。我对 Comet 和 Server Push 这个术语还是很陌生。如有必要,我也愿意学习 Python 等新的脚本语言。
我感谢任何关于使用什么脚本语言、框架和技术来启动我的项目的见解。
【问题讨论】:
-
我刚才也有同样的疑惑。我相信问题不在于 PHP,而在于 Apache。与 apache 相比,使用 comet 的 Lighttpd 表现得更好。搜索stackoverflow,有一些关于它的很好的讨论。示例:stackoverflow.com/questions/603201/using-comet-with-php
-
我也遇到过那个线程,以及 StackOverflow 中的许多相关线程。问题是我仅限于共享虚拟主机中的 apache。因此,鉴于上述情况,我正在寻找我能得到的最佳解决方案。也许我可以使用 Perl 或 Python 来稍微提高性能。但无论如何,感谢您的快速响应,@ZolaKt:D
-
我知道这不是你要找的,但通常你可以在没有长轮询的情况下做到这一点。不管有没有它,如果您仍然需要定期检查数据库,那将是瓶颈。长轮询获得的唯一好处是请求数量较少,这将导致性能降低,但我仍然认为,如果数据库查询花费的时间比发出请求的时间长(这可能总是......一些基准测试会很好,但没有发现任何有用的东西)
标签: apache2 comet long-polling multiplayer server-push