HTTP作为游戏的通信层

HTTP作为游戏的通信层,http,networking,tornado,Http,Networking,Tornado,我刚开始涉足一些游戏开发,想创建一个简单的多人游戏。使用HTTP作为多人游戏的主要通信协议是否可行。 我的游戏不会一秒钟发出几个请求,而是每隔几秒钟发出一个请求。客户端将是一个移动设备 我问这个问题的原因是,我想尝试使用Tornado可能会很有趣,据报道它可以很好地扩展,支持非阻塞请求,并且可以处理“数千个并发用户” 因此,我的客户端可以发出HTTP请求,当游戏服务器有消息告诉它时,它会响应请求。我相信这说明了一些人所说的COMET设计模式 我知道在套接字级别工作的开销较小,但我只是想知道,考虑

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

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

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

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


提前感谢。

由于目标平台是移动设备(以及所需的有限带宽),HTTP不会是我第一个从盒子里拿出的工具

WRT:

“我的客户端可以发出HTTP请求,当游戏服务器有消息告诉它时,它会响应请求。”


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

请阅读,其中涉及此问题。

如果您喜欢使用所有这些技术,那么您可以试一试。如果网站上的例子值得借鉴的话,龙卷风似乎是一个合理的选择。但是,任何简单的服务器端web语言都足以以您提到的速度提供您需要的响应。性能特征可能与此无关


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

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

答:使用HTTP作为通信协议可能对您的游戏有意义,可能没有,但这由您决定。我为Windows Mobile、Blackberry、Android和iPhone开发应用程序的时间刚刚超过10年。一路回到CE1.0。考虑到这一点,以下是我的观点

首先,我建议按照泰迪的建议阅读RFC3205。它详细解释了我提出建议的原因

通常HTTP是好的,因为

  • 如果你正在开发一款基于浏览器的游戏——flash或javascript,而你没有创建客户端,那么就使用HTTP,因为它是内置的,而且很可能是你所能使用的
  • 你可以在任何地方用非常便宜的脚本获得http服务器托管
  • 有大量可用的工具和大量的文档
  • 开始很容易
HTTP可能不好,因为

  • 与简单的TCP服务相比,HTTP带来了巨大的带宽开销。 例如,Omegle.com发送420字节的报头数据以发送9字节的有效负载
  • 如果您真的需要comet/long轮询,那么您将浪费大量时间来找出如何使您的服务器正常工作,而不是按照它所说的去做
  • 稳定的http流量可能会使移动设备在处理和带宽方面过载,从而减少用于游戏性能的资源
  • 您可能认为自己不知道如何创建自己的TCP服务器,但这确实很容易
如果您正在编写服务器和客户端,那么我将直接转到TCP。如果您已经了解python,那么请使用twisted网络库。您可以在一个小时左右的时间内安装一个简单的服务器,只需遵循教程即可

查看LineReceiver示例,了解可以使用任何telnet客户端测试的超级简单服务器。

我同意。除非游戏根本不需要速度。比如,如果出现延迟或数百个用户,用户不介意等待30秒。你说的是传统的http请求,对吗?但是如果我使用长轮询呢?客户端不是一个浏览器,而是一个设备-但它应该仍然可以工作,或者不是?是的,您的客户端可以使用HTTP请求进行轮询。即使是“无需报告”,服务器也应返回响应。这就是合适的HTTP。有关此特定概念的更多信息,请参阅HTTP BOSH: