如何使用 XMPP 和 BOSH 实现 Facebook 聊天

Posted

技术标签:

【中文标题】如何使用 XMPP 和 BOSH 实现 Facebook 聊天【英文标题】:How to implement facebook chat using XMPP and BOSH 【发布时间】:2012-06-05 06:22:07 【问题描述】:

我正在开发一个基于 php 的网站。我想在其中实现 Facebook 聊天。

我的问题是如何将 XMPP 与 BOSH 一起使用。 XMPP和BOSH是什么关系。

是否有任何示例源代码可以了解如何使用 JAXL 或 strophe.js 等库实现 Facebook 聊天

【问题讨论】:

【参考方案1】:

我的问题是如何将 XMPP 与 BOSH 一起使用。是什么关系 XMPP 和 BOSH。

BOSH 代表 http 上的双向流。它是为在 HTTP 上运行 XMPP 而设计的规范,但可用于在 http 上运行任何底层 tcp 级协议。

BOSH 基本上是在浏览器的限制范围内播放的,即一次不能向特定域发出超过 2 个请求。在这些限制内,BOSH 能够模拟服务器和客户端之间完整的双向管道。可以使用此虚拟管道传输有效负载,并且在用户体验方面它与实时一样好。

传统上,BOSH 是使用一种称为长轮询的技术来模拟的。但是,我已经能够使用 jsonp 和 websockets(如果可用)成功地运行相同的程序。

是否有任何示例源代码来了解如何实现 Facebook 使用 JAXL 或 strophe.js 等库聊天

我敢打赌,您会找到足够多的使用 strophe.js 的网络聊天应用程序示例。您只需要一个像punjab 或ebosh(我写的)这样的bosh 连接管理器,它可以连接到任何xmpp/jabber c2s 端点。

就 JAXL 示例示例而言,以下是一些您可以直接使用的示例:https://github.com/abhinavsingh/JAXL/tree/master/app 具体查看 boshchat.php、boshMUCchat.php 和 preFetchBOSH.php 示例,这些示例演示了 Jaxl 库的 BOSH 端支持。

如果您预计流量适中,可以使用这些示例。对于基于大流量的应用程序,我强烈建议使用基于 strophe.js 的解决方案。

【讨论】:

谢谢,我非常接近使用 strophe.js 在我的网站中实现 Facebook 聊天【参考方案2】:

BOSH 是一种通过 HTTP 从服务器向客户端发送消息的技术。它是为与 XMPP/Jabber 一起使用而开发的,作为模拟 TCP 的一种方式,但也可以被其他技术使用。本质上,BOSH 只是 XMPP 消息最常用的载体。

这个question 可能会在实际实施方面为您提供更多帮助。

【讨论】:

以上是关于如何使用 XMPP 和 BOSH 实现 Facebook 聊天的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 聊天平台是不是支持 BOSH?

如何配置 BOSH 服务器以支持我自己的 XMPP 服务器?

如何使用 Tsung 编写用于负载测试“XMPP over BOSH”的 xml 脚本?

在 PHP 中从 BOSH 获取 XMPP SID 和 RID?

gloox 是不是通过 BOSH 支持 BOSH 和 XMPP?

Android XMPP服务器, BOSH(Http-Binding)和WEB客户端搭建