2

我刚刚开始涉足一些游戏开发,并想创建一个简单的多人游戏。使用 HTTP 作为多人游戏的主要通信协议是否可行。我的游戏不会每秒发出多个请求,而是每隔几秒发出一个请求。客户端将是移动设备。

我问的原因是,我认为尝试使用 Tornado 可能会很有趣,据报道它可以很好地扩展并支持非阻塞请求并且可以处理“数千个并发用户”。

所以我的客户端可以发出一个 HTTP 请求,当游戏服务器有什么要告诉它时,它会响应这个请求。我相信这说明了一些人所说的 COMET 设计模式。

我知道在套接字级别工作的开销更少,但我只是想知道考虑到我的游戏要求这是否可行?还是我只是想疯了?

提前致谢。

4

5 回答 5

3

问:使用 HTTP 作为多人游戏的主要通信协议是否可行?

A. 使用 HTTP 作为通信协议可能对您的游戏有意义,可能不是,但这由您决定。我为 Windows Mobile、Blackberry、Android 和 iPhone 开发应用程序的时间刚刚超过 10 年。一路回到 CE 1.0。考虑到这一点,这是我的看法。

首先,我建议按照 Teddy 的建议阅读 RFC 3205。它详细解释了我的建议的原因。

一般来说,HTTP 是好的,因为...

  • 如果您正在开发基于浏览器的游戏 - flash 或 javascript,而您不创建客户端,那么请使用 HTTP,因为它是内置的,并且可能是您可以使用的所有内容。
  • 您可以在任何地方以超便宜的价格获得具有体面脚本的 http 服务器托管
  • 有大量可用的工具和大量文档
  • 很容易上手

HTTP 可能不好,因为...

  • 与简单的 TCP 服务相比,HTTP 在带宽方面引入了巨大的开销。例如,Omegle.com 发送 420 字节的标头数据以发送 9 字节的有效载荷。
  • 如果您真的需要彗星/长轮询,您将浪费大量时间来弄清楚如何让您的服务器正常说话,而不是按照它所说的去做。
  • 稳定的 http 流量流可能会使移动设备的处理和带宽过载,从而减少您用于游戏性能的资源。
  • 您可能不认为自己知道如何创建自己的 TCP 服务器——但这确实很容易。

如果您正在编写服务器和客户端,那么我会直接使用 TCP。如果您已经了解 python,请使用 twisted 网络库。只需按照教程,您可以在一个小时左右的时间内启动一个简单的服务器。

查看 LineReceiver 示例,了解可以使用任何 telnet 客户端进行测试的超级简单服务器。 http://twistedmatrix.com/projects/core/documentation/howto/servers.html

于 2009-11-02T06:24:20.057 回答
1

写:

“我的客户端可以发出一个 HTTP 请求,当游戏服务器有什么要告诉它的时候,它会响应这个请求。”

这不是 HTTP 应该如何工作的。所以,不,HTTP 在这里不是一个好的选择。如果超时未收到响应,则 HTTP 请求超时(60 秒是常见的默认值,但取决于具体情况)。

于 2009-10-14T04:56:30.290 回答
1

请阅读RFC 3205: On the use of HTTP as a Substrate,它处理了这个问题。

于 2009-10-14T05:01:33.853 回答
0

由于目标平台是移动设备(以及所需的有限带宽),HTTP 不会是我开箱即用的第一个工具。

于 2009-10-14T04:28:51.793 回答
0

如果你只是喜欢玩所有这些技术,那么你可以试一试。Tornado 似乎是一个合理的选择,如果网站上的示例可以参考的话。但是任何简单的服务器端 Web 语言都足以以您提到的速度提供您需要的响应。性能特征在这里可能无关紧要。

COMET 方法是当您长时间保持 HTTP 连接打开时。它主要用于“服务器推送”数据。但通常你不需要这个。发出重复请求并单独处理响应通常要简单得多。

于 2009-10-14T09:19:08.867 回答