3

我正在尝试学习和理解 XMPP 的工作原理。

据我了解,node-xmpp-bosh是一个连接管理器。连接管理器不是一个完整的 xmpp 服务器,但有点像代理,并将 xmpp 请求转发到专用的 xmpp 服务器。这导致专用 xmpp 服务器节省了它在处理连接时通常会承担的一些负载 - 尽管我不完全确定这如何导致节省,或者为什么在处理连接时会有这样的开销。

我已经获得了一个 OpenFire xmpp 服务器来连接,但这与我的 Web 应用程序位于不同的域中。我决定使用 node-xmpp-bosh 作为代理来解决可能导致的 XSS 问题,这也应该允许我使用带有 BOSH 后备功能的 websockets 来处理旧浏览器。

我正在尝试在我的客户端应用程序中使用Strophe.js 库来发送实际消息。

如何配置 node-xmpp-bosh 以将请求转发到实际的 xmpp 服务器?文档并没有说得很清楚,所以我认为它只是将请求转发到托管连接管理器的同一台机器上的 xmpp 服务器。另外,我是否需要以不同的方式配置 Strophe 才能使用连接管理器,或者我只是将请求发送到连接管理器,这应该为我发送它。

提前谢谢了

4

2 回答 2

4

node-xmpp-bosh 的默认行为是使用 DNS 在您的 jabber id 中查找域。

您可以通过提供自定义查找服务来覆盖它。在下面的示例中,查找服务将始终连接到 10.10.7.245。

var server = nxb.start_bosh({
    lookup_service: MyLookupService,
    logging: "TRACE",
}) ;

function MyLookupService(port, stream)
{
    console.log("connecting") ;
    this.connect = function(socket) {
        var self = this ;

        socket.connect(5222, "10.10.7.245", function(e) {
            console.log("connected:", e) ;
            self.emit("connect",e) ;
        }) ;

        socket.once("error", function(e) {
            console.log("error connecting:", e) ;
            self.emit("error",e) ;
        }) ;
    } ;
}

这似乎没有记录在任何地方,但这就是你的做法。

于 2014-01-28T18:25:12.517 回答
1

来自客户端的原始请求决定了连接管理器将把这个连接请求转发到哪里。如果用户名为 foobar@jabber.org,则连接管理器将转发到位于 jabber.org 的 XMPP 服务器。

于 2013-11-28T20:58:12.130 回答