2010-12-19 87 views
3

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

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

任何想法?

+0

阅读关于COMET,这基本上就像一个HTTP请求,除了服务器需要很长的响应时间(即保持连接打开) – 2011-07-05 06:54:02

回答

0

使用内置的频道API(尽管他们在邮件列表中说有些东西正在播放),广播效果不佳。

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

1

您自己创建长期连接有两个主要问题。

  1. 您不能从服务器流式输出,它将被缓冲,然后sent when the handler exits
  2. 如果您的请求未在under 1,000ms中返回,您的应用程序将为not be auto-scaled

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

你每30毫秒试图做什么?您需要一个非常深思熟虑的设计,只需阅读并在memcache中设置值即可达到consume close to half of that time。如果您需要查询数据存储区,则可能需要be over that

0

这不仅仅是HTTP的工作原理 - 它听起来像你想要的更接近(即将发布的)websockets API,目前尚未在浏览器中得到广泛支持,或者由App Engine完全支持。

尽管如此,每客户端每秒30个请求似乎特别荒谬 - 键盘上的单个用户无法生成许多事件。

相关问题