Socket.io-client连接到多个服务器

我试图从一台服务器(作为主服务器)连接到另外两台使用socket.io和socket.io客户端节点模块的服务器(充当从服务器,代码相同),使用以下代码:

var ioClient = require('socket.io-client'); var hosts = require('./hosts'); var x = {} for (var i in hosts.get) { var name = 'ns' + i; x[name] = ioClient.connect(hosts.get[i].url, { 'force new connection':true }); x[name].on('connect', function() { console.log(x[name].socket.options.host + ' connected') }); } 

正如你所看到的,我试图连接到X个不同的服务器(在文件hosts.js中定义)并将每个套接字存储在一个对象中。

问题是,尽pipe我能够连接,所有的套接字似乎来自最后一个主机,所以我最终是这样的:

 host2.pc.gg.edu connected host2.pc.gg.edu connected 

当期望值是:

 host1.pc.gg.edu connected host2.pc.gg.edu connected 

我试过断开host1,然后输出结果是这样的:

 host2.pc.gg.edu connected 

所以我想问题是套接字没有正确build立字段“options.host”

有趣的部分是当我做同样的代码时,而不是在对象中使用可变键,使用eval:

 var ioClient = require('socket.io-client'); var hosts = require('./hosts'); var x = {}; for (var i in hosts.get) { eval('x.ns' + i + '= ioClient.connect(hosts.get[' + i + '].url, { "force new connection":true });x.ns' + i + '.on("connect", function() {console.log(x.ns' + i + '.socket.options.host + " connected")});'); } 

令人惊讶的是,这是有效的,我不能区分这两个代码。 我相信这可能是更多的JavaScript错误,而不是一个socket.io错误,但我无法find一个解决scheme,经过几个小时的尝试…

非常感谢你

套接字连接就好,问题是在连接callback。 更具体地说,在callback被实际调用的时候,for循环已经完成了,variablesi和随后的variablesname指向最后一个元素。 你可以通过在循环的每个迭代周围创build一个闭包来解决这个问题,从而在callback的范围内保留i的当前值。

 for (var i in hosts.get) { var name = 'ns' + i; (function (name) { x[name] = ioClient.connect(hosts.get[i].url, { 'force new connection':true }); x[name].on('connect', function () { console.log(x[name].socket.options.host + ' connected') }); })(name); }