HTTP 作为游戏的通信层

标签 http networking tornado

我刚刚开始涉足一些游戏开发,想创建一个简单的多人游戏。使用 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/

相关文章:

python - Tornado Web 框架 Mysql 连接处理

python - Kombu以非阻塞方式

html - 将 mp3 从服务器流式传输到 html5 音频时传递持续时间

windows - 远程 IP 地址是否可以在 Windows 下的传入 TCP session 中被欺骗?

java - 在不同网络上的两台计算机之间发送数据(通过互联网)

java - 如何搭建代理网关?

python - 使用 StaticFileHandler 在 Tornado Python 上托管文件

Java HTTP 和代理

php - AngularJs http 获取到 PHP 脚本返回 php 代码

ruby-on-rails - 如何在 Ruby 中通过互联网控制没有静态 IP 的嵌入式设备?