如何从 Javascript 连接到 XMPP 服务器

Posted

技术标签:

【中文标题】如何从 Javascript 连接到 XMPP 服务器【英文标题】:How to connect to XMPP server from Javascript 【发布时间】:2011-04-26 12:35:27 【问题描述】:

我一直在寻找有关 XMPP 和 JavaScr-er、ECMAScript 和 XMPP 的信息。经过一番研究,我找到了 Strophe。它看起来很有趣,我能够获得一些代码来编译(对我来说总是一个起点:))但实际上没有建立任何联系。那时我意识到(感谢更多的研究)a)我无法真正连接到与发出页面响应的服务器不同的服务器,因为它可能是某种跨站点脚本或其他什么,并且 b )我试图连接的服务器(Google Talk)没有任何BOSH。 所以。我的问题是双重的: 1) 我可以从我的服务器使用 javascript 发布的页面连接到通用 XMPP 服务器(例如,Facebook 聊天或 Google Talk)吗? (没有插件) 2)如果是这样,怎么做? Strophe 会起作用吗? (我也听说过很多关于 WebSockets 的事情,不太确定它们是什么或者它们是否可以工作。) 谢谢。

【问题讨论】:

那么您真正想做的是让您的网站允许访问您网站的人使用 Google Talk/Facebook 聊天功能? 差不多,但该网站的整体理念是它不是一个网站。这是一个基于网络的聊天客户端……如果这有意义的话。这就像加载 Google Talk 的 Flash Web 客户端,只是我们希望它不使用 Flash。如果不清楚,我可以给你看截图。 你想要达到什么很清楚,唯一的问题是你无法按照你想象的方式实现它。为了使用这些聊天中的任何一个,您的用户必须登录到其中一个网站。之后,Facebook 或 Google 必须允许您使用用户的数据,这假设 OAuth 实施。之后,您需要访问聊天实现的 API。至少据我所知,您无法直接连接到他们的服务器。您可能可以通过使用 iframe 并加载站点的内容,然后通过 JS 动态更改布局来模拟某些内容。 好吧,Google Talk 并非如此。用户只需通过 XMPP 进行身份验证。我已经成功构建了一个 WPF GTalk 客户端 - 只需对您使用任何 XMPP 身份验证连接的用户进行身份验证。如果 Facebook 有特殊限制,我可以理解……但是有没有办法通过 JavaScript 连接到外部 XMPP 服务器? 好吧,如果是通过 JS 跨域连接 - 不,不是。这就是为什么你用某种服务器端语言创建你自己的代理连接,它可以通过 http 连接到指定的服务器,然后你的 JS 使用连接到你自己的(代理)服务器。 【参考方案1】:

为了通过 HTTP 协议连接到各种域以进行数据交换,JS 受到限制,因为由于跨站点脚本限制,禁止 POST 请求(可以通过 IFRAME 完成,但对于大多数用途而言,这是不可行的)。

这就是为什么您使用首选的服务器端语言创建一个连接到多个服务器的代理,它充当您的 JS“连接”到的服务,并使用它向浏览器显示数据。

【讨论】:

你的意思是HTTP中的代理吗?但这无法实现 XMPP 所做的实时通信。

以上是关于如何从 Javascript 连接到 XMPP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

连接到 XMPP 服务器

如何使用 PHP 连接到 XMPP 服务器

XMPP:连接到 GTalk

从 android 连接到 XMPP 服务器

从 ios 和 android 端连接到 xmpp 时获取所有组消息

Messenger 无法从第一次尝试连接到 XMPP 服务器