我一直在使用Google App Engine渠道API来创建类似于http://rawkets.com/的实时多人游戏。由于这个API基本上是“单向”(不支持持久的浏览器到服务器连接),我只是以大约30 /秒的速度发布新的AJAX POST请求(JQuery)。
它似乎产生了很大的开销(5-6kb /秒),如果可能的话我想减少它。理想情况下,我只想创建一个持续时间少于30秒的连接(appengine请求超时),并在连接期间每30毫秒继续发送新数据。然后,服务器将使用通道API将“传播单词”传播给所有其他相关客户端。希望这有一定道理!
有什么想法吗?
答案 0 :(得分:1)
自己创建长期连接有两个主要问题。
正如sje397所提到的,Channel API目前不支持普通广播 - 您需要实现自己的广播。但是,如果您只是想向附近的几个玩家推送,那么实施您自己的解决方案可能不是问题。
你每30ms试一次做什么?你需要一个经过深思熟虑的设计,只需在memcache中读取和设置一个值consume close to half of that time即可。如果您需要查询数据存储区,则可能be over that。
答案 1 :(得分:0)
使用内置的通道API,广播效果不佳(尽管他们已经在邮件列表中说某些内容正在进行中)。
您可能想要查看第三方“真正的”websockets提供商。例如,http://pusherapp.com。
答案 2 :(得分:0)
这根本不是HTTP的工作方式 - 它听起来像你想要的更接近(即将出现的)websockets API,它在浏览器中尚未得到广泛支持,或者App Engine完全支持。
尽管如此,每个客户端每秒30个请求似乎特别荒谬 - 键盘上的单个用户无法生成那么多事件。