我正在开发一款应用程序,它不驻留在AppEngine上,具有实现Web客户端(浏览器+ JavaScript)和移动客户端(ActionScript)之间聊天功能的功能。我考虑在AppEngine上使用XMPP协议(然后仅使用Google的聊天服务器,并将其余部分留在我的服务器上)。请问这种做法可行吗?与通道API有何区别?
我正在开发一款应用程序,它不驻留在AppEngine上,具有实现Web客户端(浏览器+ JavaScript)和移动客户端(ActionScript)之间聊天功能的功能。我考虑在AppEngine上使用XMPP协议(然后仅使用Google的聊天服务器,并将其余部分留在我的服务器上)。请问这种做法可行吗?与通道API有何区别?
XMPP和Channel API解决了堆栈的两个不同层次上的问题。
XMPP描述了从一个端点到另一个端点传递消息的通用方式。已经存在适用于Windows、Linux、OSX等系统的XMPP客户端,以及使用C++、Python、javascript等语言编写的现有XMPP客户端库。如果您只想将文本传递给已知拥有XMPP客户端的用户,则使用XMPP App Engine API是显而易见的解决方案;如果您想对客户端体验拥有大量控制权并且有时间进行开发,则使用现有的XMPP库并创建自定义客户端可能是一个不错的选择。
Channel API描述了一种服务器端发送消息和客户端接收消息的方法。App Engine实现提供了一个javascript客户端,这对于Web应用程序来说是棘手的部分,因为它需要一个持久的HTTP连接。您当然可以使用任何您喜欢的方法在其他平台上重新实现Channel API(对于App Engine,我们使用Google Talk堆栈;在前端使用JSON长轮询HTTP连接,在后端使用XMPP)。
根本问题在于您需要多少抽象来实现。Channel API比XMPP API更抽象,并提供客户端库使连接javascript更加容易。
Channel API使用XPC来通过IFrame与Google的GTalk客户端进行通信。该客户端促进了浏览器和您的应用程序之间的双向通信。为您提供的JavaScript库松散地映射到当前WebSocket's API,并且应该可以轻松过渡从Channel API到WebSockets,一旦/如果它在AppEngine上得到支持。
我相信XMPP是Channel API的骨干,并且是功能的超集。例如,XMPP API支持邀请。
因此,是的,您可以使用Channel API(浏览器)和XMPP(任何地方)构建聊天功能。
XMPP API 可以促进您的应用与 XMPP 客户端(如 Google Talk)之间的通信。
Channel API 用于通过 Web sockets 将数据从您的应用程序推送到 Web 浏览器。
无论哪种方式都可以作为聊天应用的一部分;选择取决于聊天客户端是使用 XMPP 客户端还是 Web 浏览器。