有没有一个开源的WebSockets(JavaScript)XMPP库?

34

是否有人编写了一个开源的XMPP库,它使用WebSockets并且旨在由浏览器运行?


现在有Strophe:http://strophe.im/strophejs/ - alexk
6个回答

24

有多种解决方案(但没有一种是完美的)

1. 使用Kaazing。

Kaazing已经支持了这个功能。它是开源的,但他们有某种双重许可证,所以最好检查一下是否可以在您的项目中使用。

2. 结合js.io和APE(Ajax Push Engine)

APE是一个Comet框架,但他们最近开始支持Websockets。在他们的网站上(“APE作为代理”部分),他们说它可以运行包括 xmpp.js 的 js.io 库,因此结合使用可能会起作用。

3. 使用Caucho

它是一个基于Java的框架,类似于APE,提供一站式Comet解决方案,似乎支持XMPP和WebSockets。

4. 请求Strophe团队支持WebSocket。

Strophe通过BOSH(双向流传输)进行XMPP交互,但也有讨论支持WebSockets

Jack Moffitt(核心开发人员和上述书籍的作者)似乎对WebSockets很感兴趣,但我们需要提供更多强有力的理由来支持WebSocket而不是BOSH。如果你有好的答案,请加入讨论。

我刚试了他们的xmpp,bosh,strophe echobot示例,效果很好。您也可以尝试一下,看它是否符合您的要求。

关于#2和#3,他们说两者都支持xmpp和websockets,但不确定它们能否一起工作。

您在考虑使用XMPP&WebSockets的应用程序是什么类型?

以下是替代建议。

  • 如果您想要出席、聊天、聊天室等功能,则可以制作Wave Gadget或机器人,然后使用Wave嵌入式API(死链接,仅供历史纪念)将其暴露给外部。Wave实际上是建立在XMPP之上的。
  • 如果您只是寻找非常低延迟的消息传递功能,则可以尝试AMQP
  • 如果您寻找更简单的消息流,则只需像我在这里演示的那样管道进出Unix文件

我写这篇博客文章时获得了大部分以上信息。 如果您不时查看评论部分,我会在发现其他解决方案时发布更新。


1
你考虑使用XMPP和WebSockets来开发什么样的应用程序?我并没有特定的想法;一般而言,当然,XMPP over WebSockets可以为真正基于事件的Web应用程序提供框架和协议,从而大大改善用户体验,例如:
  • 基于Web的电子邮件
  • 基于Web的协作
  • 实时数据同步
  • 实时更新
  • 浏览器到浏览器通信
这两种技术的结合,以及强大的客户端JavaScript引擎,似乎会在现代Web应用程序方面开启许多可能性。
- Daniel S. Sterling
1
Strophe现在支持WebSockets。它可以选择使用WebSocket或BOSH进行连接。 - Robin

18

在客户端能够得到充分处理之前,我们需要一种WebSockets上的XMPP标准,以供服务器实现。

第一步是完成WebSocket标准化。看起来这可能会在IETF HyBi工作组中发生,在撰写本文时,该工作组尚未获得IESG的批准。几周前,在广岛IETF会议上有一个HyBi Birds-of-a-Feather(BoF)(请参见meeting materials),进展顺利。

在WebSockets稳定后,XSF将创建一个XEP,将XMPP绑定到WebSockets,预计每个WebSocket帧都有一个xml流。

编辑:Jack Moffitt编写了一份IETF Internet-Draft,其中包含可以使用的协议的首次通过。 警告。 这仍然很可能会发生巨大变化。 只有在以后完全删除它的情况下才能实施它。 警告


前往Stanza io https://github.com/legastero/stanza - Devsi Odedra

3

即将推出一本涵盖此主题的书...

Professional XMPP with JavaScript and jQuery alt text http://ecx.images-amazon.com/images/I/51B7VAHw8OL._SL500_AA240_.jpg

但我假设你不想等待这本书。所以观看Jack Moffitt 在 JSConf 上的演讲吧。我今天早上就看了。(Jack Moffitt 是上面链接书籍的作者)

涉及到的库(JavaScript 和 C 的实现)是Strophe

这是一个非常有价值的探索领域,但现在还很原始。我们很快就会看到更多。WebSocket 与 HTML5 一起使用,对吗?


确实,WebSockets是HTML5的一部分;Google Chrome已经实现了它们。 - Daniel S. Sterling

3

JSJaC 实现了 XMPP Over Websockets。它已知可以与多个后端实现配合使用:

  • node-xmpp-bosh - 支持 RFC6455,自 0.6.1 版本以来就可以正常工作,并且在必要时会透明地使用 STARTTLS
  • wxg - 支持 RFC6455 并且可以正常工作,但无法连接到需要 STARTTLS 的服务器(原始版本存在问题,由 Gordin 修复)
  • ejabberd-websockets - 不支持 RFC6455 因此无法工作,对其进行适应以支持 RFC6455 对于熟悉 Erlang 的任何人都应该很容易(一些正在进行的工作可以在 Github 上找到)
  • Openfire - 有非官方插件可用,但缺乏对 RFC6455 的支持因此无法工作
  • Apache Vysper - 不支持 RFC6455 因此无法工作
  • Tigase - 未知 WebSocket 支持的工作
  • MongooseIM - ejabberd 的分支版本,支持 XMPP over Websockets。

0

我不确定为什么你特别要求一个WebSocket解决方案,因为首先XMPP服务器必须支持此功能。

但是有几个可用的XMPP JavaScript库(据我所见,它们都使用BOSH方法):

这些示例来自XMPP网站,列出了XMPP协议的开源实现。


通常链接不被视为答案。请用自己的话回答问题并使用链接作为参考。编辑后请提醒我,以便我可以取消我的投票。 - markus
问题特别询问支持WebSockets而非BOSH的JavaScript XMPP库。 - Matt Zukowski
@MattZukowski,如果您想要的话,请继续给提到 BOSH 的所有答案投反对票。然而,在写作时,并没有仅使用 JS 的解决方案可用,所以这仍是一个有效的答案。在这种情况下,提及替代方案是很好的,因为问题并未明确表示“请勿使用 BOSH 方案”。 - MKroehnert

0

我不确定浏览器端的JS能否独立处理WebSocket协议,因为它主要依赖于浏览器API。目前只有Chrome、Safari5和可能的Firefox4支持WebSocket。基于Flash/AS3的解决方案有很多(然后你的JS与Flash代码通信),但主要限制是Flash不支持安全连接(太糟糕了)。

顺便说一下,你可以查看this websocket implem,他们提供开源Java WebSocket客户端库,并似乎处理XMPP相关内容,如果你浏览存储库,你可能会找到基本的AS3 WebSocket实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接