7

我正在开发一个不驻留在 AppEngine 上的应用程序,并且具有聊天功能,可以放入通信 Web 客户端(浏览器 + javascript)和移动客户端(ActionScript)。我正在考虑在 AppEngine 上使用 XMPP 协议(​​然后仅将服务器用于 Google 上的聊天功能,其余部分仍留在我的服务器上)。你告诉我这是否可能?与 Channel API 有什么区别?谢谢

4

4 回答 4

10

XMPP 和 Channel API 解决了堆栈的两个不同级别的问题。

XMPP 描述了一种从一个端点到另一个端点获取消息的通用方法。有适用于 Windows、Linux、OSX 等的现有 XMPP 客户端,并且现有的 XMPP 客户端库编写为C++Pythonjavascript等。如果您只想将文本传递给您知道已经拥有 XMPP 客户端的用户,请使用XMPP App Engine API 是显而易见的解决方案;如果您想对客户端体验进行大量控制并有时间花在上面,那么使用现有的 XMPP 库并制作自定义客户端可能是一个不错的选择。

Channel API 描述了用于发送消息的服务器端方法和用于接收消息的客户端方法。App Engine 实现提供了一个 javascript 客户端,这对于 Web 应用程序来说是一个棘手的部分,因为它需要一个持久的 HTTP 连接。您当然可以使用您喜欢的任何方式在另一个平台上重新实现 Channel API(对于 App Engine,我们使用 Google Talk 堆栈;后端的 XMPP 通过前端的长轮询 HTTP 连接使用 JSON)。

基本问题是您的实现需要多少抽象。Channel API 比 XMPP API 抽象得多,并提供了一个客户端库来使通过 javascript 的连接变得容易。

于 2011-06-13T13:41:32.040 回答
1

Channel API 使用称为XPC的东西通过 IFrame 与 Google 的 GTalk 客户端进行通信。该客户端促进了浏览器和您的应用程序之间的双向通信。为您提供的 JavaScript 库松散地映射到当前WebSocket 的 API,并且一旦/如果 AppEngine 支持,应该可以轻松地从 Channel API 转换到 WebSocket。

我相信 XMPP 是 Channel API 的支柱,是功能的超集。例如,XMPP API 支持 邀请

所以,是的,您可以使用 Channel API(浏览器)和 XMPP(无处不在)来构建聊天功能。

于 2011-06-02T00:03:52.177 回答
1

据我了解,ChannelAPI 是 Google XMPP 服务背后的支柱。如果您想在客户端的 JavaScript 和托管在 GAE 上的 Web 应用程序之间异步发送/接收(服务器推送)行 JSON 对象,那么 ChannelAPI 是要走的路。

于 2011-06-01T17:57:47.077 回答
0

XMPP API 促进了您的应用程序和 XMPP 客户端(如 Google Talk)之间的通信。

Channel API 用于使用 Web 套接字将数据从您的应用程序推送到 Web 浏览器。

两者都可以用作聊天应用程序的一部分;选择仅取决于聊天客户端是使用 XMPP 客户端还是 Web 浏览器。

于 2011-06-01T20:41:18.973 回答