我们假设有几个客户端使用Channel API连接到App Engine。每个客户端发送消息,应根据某些规则将消息传播到其他连接的客户端。棘手的部分是客户端可能不是同一个App Engine实例。
有没有办法将数据从一个实例推送到其他实例?
(是的,我知道Memcache,但这需要进行某种轮询。)
答案 0 :(得分:3)
你在这里问两个问题。
一个。您可以在不使用轮询的情况下将数据从一个实例推送到另一个实例。答案通常是否定的。
湾一个客户端可以向服务器发送可以传播到其他客户端的消息吗?是的,这不需要将消息传播到其他服务器端实例。
将Channel API视为服务。客户端连接到Channel API服务;它们没有连接到任何特定实例。因此,任何实例都可以向任何客户端发送消息。
如果目标客户端列表非常大,您可能希望在任务队列中执行3/4步骤,此操作可以运行更长时间。
答案 1 :(得分:0)
客户端连接到哪个实例并不重要,API会对您隐藏这些实例。
客户端只能通过标准HTTP命令“回复”消息,它们实际上没有任何方法可以直接通过通道API进行响应。
因此,服务器A1上的客户端A希望向服务器B1上的客户端B发送消息。
客户端A发布到处理程序。那可能是实例A1或B1。无论服务器现在将消息传递给客户端B,无论服务器客户端B通过Channel API连接到哪个服务器都无关紧要。
真正的一点是,一般来说,任何App Engine实例都没有任何数据。因此,连接到哪个实例并不重要,它可能是第99个实例或第一个启动实例。因此,您必须设计应用程序,以便与正在使用的实例无关。
客户端通过HTTP向服务器发送消息。
服务器通过渠道API向N个客户发送消息。
答案 2 :(得分:0)
渠道API不会建立固定的前端 - 实例 - 客户端连接。如果任何前端实例知道通道ID,则可以将消息推送到通道。
您需要做的是跨渠道传递消息。