HTTP 作为游戏的通信层

Wil*_*llF 3 networking http tornado

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

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

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

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

提前致谢。

Gre*_*tle 5

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

答:使用 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