GAE Chats的每个示例都使用某种轮询。但是,如果我的GAE应用程序包含客户端列表(必要时在数据存储区中),也许我可以通过向所有这些客户端发送消息来避免轮询。我怎样才能做到这一点?
答案 0 :(得分:6)
如果您在谈论HTTP,简短的回答是GAE目前不支持它。我认为你所问的有时被称为BOSH。一旦WebSockets变得更加普及,它们将成为解决此问题的绝佳解决方案。
与此同时,您可能需要查看XMPP。使用XMPP可以避免轮询。谷歌已宣布Channel API(尚未发布),它基本上会为您提供与websockets相同的功能。
答案 1 :(得分:2)
您可能已经看过一些聊天室示例......
由于您只想向数据存储区上的用户发送消息(提示:IMProperty非常适合存储此类数据),只需直接发送消息即可:
from google.appengine.api import xmpp
# `destination` is a list of JIDS
# `message` is a normal unicode string
xmpp.send_message(destination, message)
你可以找到关于尼克约翰逊使用XMPP的精彩教程here
答案 2 :(得分:0)
请注意,您现在可以使用App Engine渠道API:http://code.google.com/appengine/docs/python/channel/
您可以使用以下方式为给定客户创建频道:
channel.create_channel(client_id)
然后,当您想要更新该客户端时,请发送消息:
channel.send_message(client_id, message)
基本上每个客户端都会获得一个可以推送消息的持久连接。