使用node-xmpp-bosh将消息转发到另一台机器上的xmpp服务器

时间:2013-11-27 17:15:26

标签: websocket xmpp strophe bosh node-xmpp

我正在努力学习和理解XMPP的工作原理。

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

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

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

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

非常感谢提前

2 个答案:

答案 0 :(得分: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) ;
        }) ;
    } ;
}

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

答案 1 :(得分:1)

来自客户端的原始请求指示连接管理器将转发此连接请求的位置。如果用户名是foobar@jabber.org,那么connectIon管理器将转发到jabber.org上的XMPP服务器。