【问题标题】:Google App Engine: Browser to Server persistent connectionGoogle App Engine:浏览器到服务器的持久连接
【发布时间】:2010-12-19 08:55:40
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

  • 阅读COMET,它基本上就像一个HTTP请求,只是服务器需要很长时间才能响应(即保持连接打开)

标签: jquery python ajax google-app-engine channel-api


【解决方案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

【讨论】:

    【解决方案2】:

    使用内置的频道 API 广播效果不太好(尽管他们在邮件列表中说正在做一些事情)。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-06
        相关资源
        最近更新 更多