3

我一直在使用 Google App Engine 频道 API 来创建类似于http://rawkets.com/的实时多人游戏。由于这个 API 基本上是“一种方式”(不启用持久的浏览器到服务器的连接),我只是以大约 30/秒的速度发出新的 AJAX POST 请求(JQuery)。

它似乎产生了很大的开销(5-6kb/秒),如果可能的话,我想减少它。理想情况下,我只想创建一个持续时间少于 30 秒(appengine 请求超时)的连接,并在连接期间继续每 30 毫秒发送一次新数据。然后,服务器将使用通道 API 将消息“传播”给所有其他相关客户端。希望这有点道理!

有任何想法吗?

4

3 回答 3

1

自己创建长期连接存在两个主要问题。

  1. 您不能从服务器流式传输输出,它将被缓冲然后在处理程序退出时发送
  2. 如果您的请求未在 1,000 毫秒内返回,的应用将不会自动缩放

正如 sje397 提到的,Channel API 目前不支持一般广播——您需要实现自己的。但是,如果您只是想向附近的几个玩家推送,那么实施您自己的解决方案可能不是问题。

您每 30 毫秒尝试做什么?您需要一个经过深思熟虑的设计,仅在 memcache 中读取和设置一个值就会消耗将近一半的时间。如果您需要查询数据存储区,您可能已经完成了.

于 2010-12-19T18:40:44.263 回答
0

使用内置的频道 API 广播不能很好地工作(尽管他们在邮件列表上说有些东西正在工作中)。

您可能想查看第三方“真正的”websockets 提供商。例如,http ://pusherapp.com 。

于 2010-12-19T13:09:57.237 回答
0

这根本不是 HTTP 的工作方式 - 听起来您想要的更接近(即将推出的)websockets API,它尚未在浏览器中得到广泛支持,或者 App Engine 根本不支持。

尽管如此,每个客户端每秒 30 个请求似乎特别高 - 键盘上的单个用户不可能生成这么多事件。

于 2010-12-19T23:09:46.400 回答