App Engine 聊天应用程序

Posted

技术标签:

【中文标题】App Engine 聊天应用程序【英文标题】:App Engine chat application 【发布时间】:2012-08-03 19:47:34 【问题描述】:

我正在使用 xmpp 在应用引擎上编写一个聊天应用程序。我的想法是让用户互相聊天。我可以通过获取登录用户并删除地址的@gmail.com 部分并将其替换为@appid.appspotchat.com 来获取要发送到google talk 帐户的消息)例如,如果登录用户是bob @gmail.com,用于发送的 jid 将是 bob@appid.appspotchat.com)。然后,您可以将消息发送到 google talk 帐户,例如jeff@gmail.com。

我的问题是再次收到消息。开发者页面显示了应用程序本身如何接收到 appid@appspot.com jid 的消息,但是如何让它接收到 appid.appspot.com jid 的消息,然后将这些消息呈现给登录的用户?总体思路是,当用户登录时,我将检索 thri 联系人列表,获取他们的联系人(将 gmail.com 替换为 appid.appspotchat.com),然后将可用的联系人呈现给用户。

如果这是不可能的,有没有办法让登录的用户以不同的方式与其他用户聊天?我简单地查看了频道 api,但我认为这不合适?

【问题讨论】:

【参考方案1】:

当您的服务器收到针对该用户的消息时,您可以使用 Channel API 将消息向下发送到客户端。无法将 XMPP 消息直接发送给您自己页面上的用户; XMPP API 用于向登录到 XMPP 客户端(例如 Gmail、Pidgin 等)的用户发送消息。

【讨论】:

基本上 Channel API 消除了轮询的需要。只要您不介意在刷新内存缓存时可能会丢失消息,您当前的计划也将起作用。 当用户登录时,您需要在他们的客户端页面上创建一个频道。您可以使用他们的 JID 作为该频道的客户端 ID。然后,当您的应用收到该用户的消息时,只需使用 channel.send_message() 发送到与该消息所针对的 JID 对应的 clientid。 这里是文档:developers.google.com/appengine/docs/python/channel/overview 您使用您选择的 clientid 在服务器端创建一个通道令牌并将其传递给客户端(通常在您呈现页面时)。然后,您将消息从服​​务器发送到由 clientid 标识的客户端。 感谢您的帮助,我找到了这个示例应用程序(它本身就是聊天),所以看看他们做了什么code.google.com/p/partychapp/source/browse【参考方案2】:

您不能使用anything@your_app_id.appspot.com。相反,您必须使用anything@your_app_id.appspotchat.com,如XMPP Addresses 中所述。

【讨论】:

是的,很抱歉,当我输入它时,我的意思是这样写的(现在更正了)。您知道用户如何接收发往特定anything@appid.appspotchat.com jid 的消息,就好像它是他们自己的地址一样? 这应该可以工作:developers.google.com/appengine/docs/java/xmpp/… 感谢我看到这些页面。如果地址 bob@appid.appspotchat.com 被发送到,所有这些请求是否都会发送到同一个处理程序,如果是这样,bob 如何获取这些消息?在我看来,处理程序对于在后台自动处理消息而不涉及用户(例如对于聊天机器人)更有用。 我认为这可以利用数据存储来完成,但我试图避免这种情况,因为如果您必须检查写入通过应用发送的每条消息,这将无助于配额 请求肯定会由多个前端实例提供服务,因此您需要一个永久存储,例如数据存储或至少是内存缓存。

以上是关于App Engine 聊天应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 聊天 API - Python App Engine

是否可以使用 XMPP 和 Google App Engine 创建一个简单的聊天工具?

XMPP App Engine 服务不适用于移动 Gtalk 应用 [关闭]

Google App Engine 中未订阅用户的 IM 状态

将简单的 Socket.io Flask 应用程序部署到 Google App Engine:仍未解决

检测用户登录/注销 xmpp google app engine