1

我想构建一个支持聊天的多人网络游戏应用程序。我认为该应用程序将不得不处理数百个同时连接。

我计划将我的应用程序托管在共享网络托管中,它有这些限制(很可能类似于PHP + Comet(长轮询)缩放/主机):

  • 看来我不能更改网络服务器。很可能它正在使用 Apache。
  • 支持 MySQL 5、PHP 5.3.x、Perl、Python、Ruby on Rails、CGI

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

这是我的研究结果,然后是我的问题:

  1. 一些资源(如Python Comet Server)说 PHP 不适合处理并发连接,而​​ Python 是更好的选择。这是真的?
  2. 我在 PHP 中尝试过长轮询技术(虽然我不知道它是否正确实现,比如Comet 问题与废弃的打开连接),使用“无限循环,直到数据更改”。方法。这几乎行得通。剩下的问题是,当浏览器关闭时,服务器进程永远不会死掉(服务器不知道连接已经终止,数据永远不会改变)。PHP有什么方法可以检测浏览器是否已终止以停止循环?

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

目前,我能够使用 PHP、MySQL 和 JQuery for JS 编写代码。我对 Comet 和 Server Push 这个术语还是很陌生。如有必要,我也愿意学习 Python 等新的脚本语言。

我很欣赏任何关于使用什么脚本语言、框架和技术来启动我的项目的见解。

4

2 回答 2

2

当您有一个共享的托管环境并且强制执行了许多限制时,外包实时功能是一个好主意。我会这么说,因为我在这样一家公司工作,Pusher。但我希望其他人会在这方面支持我。

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

主要好处是:

  • 无需安装或维护
  • 无需处理持久连接 - 无需使用资源
  • 非常简单的用法:在应用程序中编写脚本标签并调用 REST API
  • 托管解决方案处理扩展

此外,这里是托管实时解决方案的列表

于 2011-10-07T09:55:23.160 回答
0

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

我在打开连接时遇到了同样的问题。只是不要花时间在 PHP 中搜索解决方案 - 以后你会后悔的。我曾是。只需使用为 Comet 制造的产品。如果你更喜欢 JAVA,那么有:CometD

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

于 2011-10-07T08:27:14.033 回答