跨App Engine实例推送数据

时间:2013-02-21 17:25:27

标签: google-app-engine

我们假设有几个客户端使用Channel API连接到App Engine。每个客户端发送消息,应根据某些规则将消息传播到其他连接的客户端。棘手的部分是客户端可能不是同一个App Engine实例。

有没有办法数据从一个实例推送到其他实例?

(是的,我知道Memcache,但这需要进行某种轮询。)

3 个答案:

答案 0 :(得分:3)

你在这里问两个问题。

一个。您可以在不使用轮询的情况下将数据从一个实例推送到另一个实例。答案通常是否定的。

湾一个客户端可以向服务器发送可以传播到其他客户端的消息吗?是的,这不需要将消息传播到其他服务器端实例。

将Channel API视为服务。客户端连接到Channel API服务;它们没有连接到任何特定实例。因此,任何实例都可以向任何客户端发送消息。

  1. 您需要在数据存储区中存储客户的频道令牌,以某种方式查询以符合您的规则。
  2. 您的客户端发出HTTP请求以向您的服务器发送消息。
  3. 服务器上的处理程序查询需要将消息传播到的通道令牌(从memcache或数据存储区)。
  4. 服务器上的处理程序向所有客户端发送消息。
  5. 如果目标客户端列表非常大,您可能希望在任务队列中执行3/4步骤,此操作可以运行更长时间。

答案 1 :(得分:0)

客户端连接到哪个实例并不重要,API会对您隐藏这些实例。

客户端只能通过标准HTTP命令“回复”消息,它们实际上没有任何方法可以直接通过通道API进行响应。

因此,服务器A1上的客户端A希望向服务器B1上的客户端B发送消息。

客户端A发布到处理程序。那可能是实例A1或B1。无论服务器现在将消息传递给客户端B,无论服务器客户端B通过Channel API连接到哪个服务器都无关紧要。

真正的一点是,一般来说,任何App Engine实例都没有任何数据。因此,连接到哪个实例并不重要,它可能是第99个实例或第一个启动实例。因此,您必须设计应用程序,以便与正在使用的实例无关。

  1. 客户端通过HTTP向服务器发送消息。

  2. 服务器通过渠道API向N个客户发送消息。

答案 2 :(得分:0)

渠道API不会建立固定的前端 - 实例 - 客户端连接。如果任何前端实例知道通道ID,则可以将消息推送到通道。

您需要做的是跨渠道传递消息。

  1. 用户1正常向服务器发送消息(例如通过GET)
  2. 服务器查找第二个用户的频道ID并按下消息
  3. 在其他方向重复该过程:第二个用户到第一个用户。