我刚刚开始涉足一些游戏开发,想创建一个简单的多人游戏。使用 HTTP 作为多人游戏的主要通信协议(protocol)是否可行。 我的游戏不会每秒发出多个请求,而是每隔几秒发出一个请求。客户端将是移动设备。
我问的原因是,我认为尝试使用 Tornado 可能会很有趣,据报道它可以很好地扩展并支持非阻塞请求并且可以处理“数以千计的并发用户”。
因此我的客户端可以发出 HTTP 请求,当游戏服务器有消息要告诉它时,它会响应该请求。我相信这说明了一些人所说的 COMET 设计模式。
我知道在套接字级别工作的开销较小,但我只是想知道考虑到我的游戏要求,这是否可行?还是我只是想疯了?
提前致谢。
最佳答案
问:使用 HTTP 作为多人游戏的主要通信协议(protocol)是否可行。
一个。使用 HTTP 作为通信协议(protocol)可能对您的游戏有意义,也可能没有意义,但这由您决定。我为 Windows Mobile、Blackberry、Android 和 iPhone 开发应用程序的时间刚刚超过 10 年。一直回到 CE 1.0。考虑到这一点,这是我的看法。
首先,我建议按照 Teddy 的建议阅读 RFC 3205。它详细解释了我提出建议的原因。
一般来说 HTTP 是好的,因为......
- 如果您正在开发基于浏览器的游戏 - flash 或 javascript,但您没有创建客户端,那么请使用 HTTP,因为它是内置的,而且很可能是您可以使用的所有内容。
- 您可以在任何地方以非常便宜的方式获得带有体面脚本的 http 服务器托管
- 有大量可用的工具和大量文档
- 上手很容易
HTTP 可能不好,因为...
- 与简单的 TCP 服务相比,HTTP 在带宽方面引入了巨大的开销。 例如 Omegle.com 发送 420 字节的 header 数据来发送 9 字节的有效载荷。
- 如果您真的需要 comet/长轮询,您将浪费大量时间来弄清楚如何让您的服务器正确对话,而不是处理它所说的内容。
- 稳定的 http 流量流可能会使移动设备在处理和带宽方面重载,从而减少您用于提高游戏性能的资源。
- 您可能不认为自己知道如何创建自己的 TCP 服务器 - 但它确实很简单。
如果您正在编写服务器和客户端,那么我会直接使用 TCP。如果你已经了解 python,那么使用 twisted 网络库。只需遵循教程,您就可以在一个小时左右的时间内启动一个简单的服务器。
查看 LineReceiver 示例,了解一个 super 简单的服务器,您可以使用任何 telnet 客户端进行测试。 http://twistedmatrix.com/projects/core/documentation/howto/servers.html
关于HTTP 作为游戏的通信层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1564234/