【发布时间】:2010-12-23 10:30:34
【问题描述】:
有没有人编写过使用 WebSockets 并打算由浏览器运行的开源 XMPP 库?
【问题讨论】:
-
现在有 Strophe:strophe.im/strophejs
标签: javascript xmpp
有没有人编写过使用 WebSockets 并打算由浏览器运行的开源 XMPP 库?
【问题讨论】:
标签: javascript xmpp
即将出版一本涵盖该主题的书...
Professional XMPP with JavaScript and jQuery alt text http://ecx.images-amazon.com/images/I/51B7VAHw8OL._SL500_AA240_.jpg
但我假设您不想等待这本书。所以看the Jack Moffitt's presentation from JSConf。我今天早上看了。 (杰克莫菲特是上面链接的书的作者。)
涉及的库(JavaScript 和 C 实现)是Strophe。
这是一个非常富有成果的探索领域,但非常原始。我们很快就会看到更多。 WebSockets 是 HTML5 自带的,对吗?
【讨论】:
我们还没有一个服务器可以实施的 XMPP over WebSockets 标准,在充分处理客户端之前需要这个标准。
第一步是完成WebSocket标准化。看起来这可能发生在 IETF HyBi 工作组中,在撰写本文时该工作组尚未获得 IESG 的批准。几周前在广岛 IETF 会议上举办了 HyBi Birds-of-a-Feather (BoF)(见 meeting materials),进展顺利。
在 WebSockets 有一个稳定的引用并且似乎正在稳定下来之后,XSF 将创建一个将 XMPP 绑定到 WebSockets 的XEP,大概每个 WebSocket 帧都有一个节。
编辑:Jack Moffitt 编写了一个 IETF Internet-Draft,第一次通过了可以使用的协议。 警告。这种情况仍有可能发生巨大变化。仅当您愿意稍后将其完全删除时才实施它。 警告。
【讨论】:
有多种解决方案(没有一个是完美的)
他们已经支持它。它是开源的,但他们有某种dual license,所以最好检查一下你是否可以用于你的项目。
APE 是 Comet 框架,但他们最近开始支持 Websockets。 在他们的网站上(“APE 作为代理”部分),他们说它可以运行包含 xmpp.js 的 js.io 库,因此将它们组合起来可能会起作用。
它是一个类似于 APE 的基于 java 的框架,提供一站式 Comet 解决方案,它们似乎同时支持 XMPP 和 WebSockets
Strophe 通过 BOSH 执行 XMPP(同步 HTTP 上的双向流),但也有 a discussion about supporting WebSockets。
Jack Moffitt(核心开发者和上述书籍的作者)似乎对 WebSockets 很感兴趣,但我们需要提供更强有力的理由来说明他们为什么需要在 BOSH 上支持 WebSocket。如果你有好的答案,请加入我们的行列。
我刚刚尝试了他们的xmpp,bosh,strophe echobot example,效果很好。您可能还想尝试一下,看看它是否符合您的要求。
对于#2 和#3,他们说它们都支持 xmpp 和 websockets,但不确定它们是否可以一起使用。
您正在考虑将 XMPP 和 WebSockets 用于哪种应用程序?
以下是替代方案的建议。
我在写this blog post 时得到了上面的大部分信息。 如果您不时查看评论部分,我会在找到其他解决方案后发布更新。
【讨论】:
我不确定您为什么要专门要求 WebSocket 解决方案,因为 XMPP 服务器必须首先支持这一点。
但是有几个 XMPP JavaScript 库可用(据我所知,它们都使用 BOSH 方法):
这些示例取自XMPP Website,其中列出了 XMPP 协议的开源实现。
【讨论】:
我不确定浏览器端的 JS 是否可以单独处理 websocket 协议,因为它主要依赖于浏览器 API。很少有浏览器支持 websocket:Chrome、Safari5,也许是 Firefox4。基于 flash/as3 的解决方法有很多(然后你的 js 与 flash 代码通信),主要限制是 flash 不支持安全连接(太糟糕了)。
BWT,您可以查看this websocket implem,他们提供了开源 Java websocket 客户端库,并且似乎处理 xmpp 的东西,如果您浏览存储库,您可能会发现基本的 as3 websocket 实现。
【讨论】:
JSJaC 实现XMPP Over Websockets。众所周知,它可以与多个后端实现一起使用:
【讨论】: