实时浏览器游戏服务器

时间:2009-12-31 03:21:26

标签: browser real-time

我主要是在寻找有关如何进行此操作的设置建议和指示。我将尽可能详细地解释,并注意可能的方法,这可能是合理的。

这样做的目的是创建一个实时的浏览器游戏,我找到的最好的方法是使用ajax进行“长轮询”,这将基本上设置一个请求与服务器“挂在那里“直到服务器有东西发送它,然后在收到更多数据时重新建立连接。为了我的目的,这将处理聊天系统以及角色移动,IE:如果玩家进入同一区域,那里的客户将收到响应通知他们,从而更新浏览器客户端以显示此信息。

以上是相对容易实现的,我已经为它做了一个测试用例,但是我想改进它,在服务器端它运行一个循环X的时间,然后自动超时和发回和空字符串,因此可以进行另一个连接,这是为了防止无限循环并在不应该的情况下耗尽资源。对于需要发送到客户端的消息,我使用平面文件,而不是在每个循环周期查找数据库(对于需要发送到客户端的消息而言是昂贵的),如果文件的修改时间戳大于发送给客户端的最后一条消息,那么一些新的东西。但是我相信这也会很昂贵(不像使用mysql数据库那么多?)每秒做几次。

我的思考过程是让C ++程序(速度)不断运行,并使用它来在内存中快速查找新消息,所以第四,这也会给我额外的好处,即能够拥有游戏中的机器人可以控制服务器以获得更实时的感觉/接近,但我不知道这是否可能,而且我在谷歌上的搜索没有结果。

我最希望能够做的方法是继续使用PHP来执行页面的呈现和控制等,并让ajax请求转到C ++应用程序(它将始终运行)可以处理所有实时方面。

CGI违背了上述方法的目的,因为它在每个请求上创建了一个新的应用程序实例,这个实例既慢又完全是我不想要的,我有php而且不想切换一个完美地为另一个更适合的语言运行语言,然而PHP(据我所知)不能将内容存储在内存中(ram)等等。

我想到的另一种方法是使用php套接字连接到C ++应用程序,虽然我不知道这可能有多可行。 C ++应用程序基本上只需要控制机器人(AI)和聊天系统消息。我完全不知道如何通过PHP处理机器人。

我希望这能完全解释我的意图和目标是什么,所以如果有人有任何指示或建议那么请回复并帮助我,我将非常感激。如果您需要任何额外的信息(如果我没有覆盖某些东西或非常好的东西),那么我将很乐意尝试更好地解释。

2 个答案:

答案 0 :(得分:2)

阅读你的帖子会敲响警钟。

您对多线程代码有多熟悉?用C ++?如果答案“不是很”,那么我担心你可能会咬掉相当大的一块。为什么不利用一些现有的(经过试验和测试的)COMET服务器实现而不是这种准系统方法呢?无论您考虑什么应用程序,它都应该与通信实现完全分开。

作为已经实现了这样一个服务器的人,我可以告诉你,需要很多设计迭代并且需要很长时间才能完成。现实地测试这样的产品也是一个非常棘手的过程。

答案 1 :(得分:2)

反应需要多快?对于接近实时动作游戏的任何事情,AJAX / Comet将会变得太慢。开销也很令人沮丧。

这类事情的前进方向可能是WebSocket,后端有自定义服务器。但我认为这并不意味着你需要诉诸C [++];瓶颈很可能是网络,而不是服务器处理器的能力。

我正在使用带有简单消息复制系统的Python SocketServer - 在我的情况下,所有游​​戏逻辑都在客户端,一些复杂的JavaScript在面对延迟时保持一致的游戏世界 - 但即使对于更复杂的服务器端我认为脚本语言可能会很好。

WebSocket还没有准备好;没有主流的浏览器实现。与此同时,我正在使用模拟WebSocket接口的Flash Socket备份。 Flash套接字有其自身的问题,因为它们无法协商代理,但它们很快,并且希望随着WebSocket正常到达,对它们的需求将减少。