我正在努力学习和理解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才能使用连接管理器,或者我只是将请求发送给连接管理器,这应该为我发送。
非常感谢提前
答案 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服务器。