Google App Engine:浏览器与服务器的持久连接

3 投票
3 回答
1663 浏览
提问于 2025-04-16 08:44

我最近在玩谷歌的App Engine频道API,想做一个类似于http://rawkets.com/的实时多人游戏。这个API基本上是“单向”的,也就是说它不支持持续的浏览器和服务器之间的连接,所以我每秒大约发出30个新的AJAX POST请求(用的是JQuery)。

这样做似乎产生了很大的开销(每秒5-6kb),我希望能减少这个开销。理想情况下,我想建立一个连接,持续时间稍微少于30秒(这是App Engine的请求超时),在这个连接期间每30毫秒发送一次新数据。然后服务器会利用频道API把信息“传播”给所有其他相关的客户端。希望这样说能让你明白!

有没有什么好主意?

3 个回答

0

使用内置的频道API时,广播功能不是很好用(虽然他们在邮件列表上说正在改进这个问题)。

你可以考虑使用一个第三方的“真正的”WebSocket服务提供商。例如,可以看看 http://pusherapp.com

0

这根本不是HTTP的工作方式——听起来你想要的更像是即将推出的websockets API,但目前浏览器对它的支持还不太普遍,App Engine也根本不支持。

不过,每个用户每秒30个请求听起来实在是太高了——一个人在键盘上根本不可能产生这么多事件。

1

自己创建长时间连接有两个主要问题。

  1. 你无法从服务器实时发送输出,数据会被暂时存储,等到处理完毕后才会一起发送
  2. 如果你的请求没有在1000毫秒内返回,你的应用就不会自动扩展

正如sje397提到的,Channel API目前不支持一般的广播功能——你需要自己实现。不过,如果你只是想给几个附近的玩家发送信息,自己做一个解决方案可能就没那么复杂。

你每30毫秒想做什么?你需要一个非常周密的设计,因为仅仅是读取和设置memcache中的一个值就会消耗接近一半的时间。如果你还需要查询数据存储,你可能会超出这个时间限制

撰写回答