2011-10-07 88 views
1

我想构建一个支持聊天的多人网页游戏应用程序。我认为应用程序将不得不处理数百个同时连接。阿帕奇与彗星支持

我打算举办一个共享的虚拟主机,它有这些限制(最有可能类似于PHP + Comet (long-polling) scaling/hosts)我的应用程序:

  • 似乎它不会我可以改变Web服务器。很可能它使用的是Apache。
  • 支持MySQL 5,PHP 5.3.x,则应Perl,Python和Ruby on Rails的,CGI

(更确切地说,我将使用HawkHost的共享虚拟主机。)

这里是我的研究成果,其次是我的问题:

  1. 一些资源(如Python Comet Server)说,PHP是不好处理的并发连接,而​​Python是更好的选择。这是真的?
  2. 我试过了PHP中的长轮询技术(尽管我不知道它是否正确实现,如Comet issue with abandoned open connections),使用“无限循环直到数据发生变化”。方法。这几乎可以工作。剩下的问题是,浏览器关闭时服务器进程永远不会停止(服务器不知道连接已经终止,数据也不会改变)。有没有什么方法可以检测浏览器是否被终止,以便它停止循环?

我一直在寻找答案,但我仍然无法得出任何结论。这个话题在StackOverflow上也被问过这么多次,如果我听起来可能会重复,我很抱歉>。 <。

目前我能够使用PHP,MySQL和JQuery for JS进行编码。对于Comet和Server Push这个术语,我还是个新手。如果有必要,我也愿意学习Python等新的脚本语言。

我很欣赏任何有关使用哪种脚本语言,框架和技术来启动我的项目的见解。

+0

前段时间我很想知道。我相信问题不在于PHP,而在于Apache。与彗星相比,Lighttpd的表现要好得多。搜索stackoverflow,有几个很好的讨论。例如:http://stackoverflow.com/questions/603201/using-comet-with-php – ZolaKt

+0

我也遇到过这个线程,以及StackOverflow中的许多相关线程。问题是我仅限于我的共享虚拟主机中的apache。所以我正在寻找我能得到的最佳解决方案,因为我的情况如上。也许我可以利用Perl或Python来稍微提高性能。但无论如何,感谢您的快速响应,@ZolaKt:D – Arkross

+0

我知道它不是你在找什么,但通常你可以不用长时间轮询。无论是否需要,如果您仍然需要定期检查数据库,那将是瓶颈。只有通过长轮询才能得到的请求数量较少,这会导致性能下降,但我认为,如果db查询需要更多时间而不是提出请求(这可能总是... ...某些基准测试会很好,但没有发现任何有用的东西) – ZolaKt

回答

2

当你有一个共享的宿主环境,并且有一些强制执行的限制,那么外包实时功能是个好主意。我会说这是因为我为一家这样的公司工作,Pusher。但我希望其他人会支持我。

使用托管解决方案时,您可以通过向RESTful API发出HTTP请求来推送通知。该服务然后将消息发送到连接的Web客户端(浏览器)。浏览器确实需要包含脚本标记或使用也连接到托管服务的库。

主要好处是:

  • 没有安装或维护
  • 无需处理持久连接 - 没有资源使用
  • 真正简单的用法:在应用程序脚本标记,并调用REST API
  • 托管解决方案处理缩放

此外,这里是一个list of hosted realtime solutions

+0

哇,这是一个不错的服务列表!我还没有托管服务的主要概念,但我会尝试Pusher。谢谢,@leggetter! – Arkross

+0

你的推杆岩石,@leggetter! :D – Arkross

+0

@Arkross真的很高兴它为你工作:) – leggetter

0

所以你可以使用Python。然后你可以使用Tornado。 (psst ... facebook使用它)

而且我也有打开连接的问题。只是不花时间在PHP搜索解决方案 - 后来你会感到抱歉。我曾是。只要使用为彗星制造的东西。如果你更喜欢JAVA,那么有:CometD

并为游戏获得一个正常的托管。他们这些天很便宜。

+0

“正常托管”,你的意思是虚拟专用服务器(VPS)?我认为这是一个很好的解决方案,因为我可以配置服务器本身,因为应用程序变得非常大,需要处理更多的连接。我也熟悉Java。感谢您的想法,@ ernestas! – Arkross

+0

是的,我是VPS。您的欢迎:) –