【发布时间】:2014-03-29 04:34:51
【问题描述】:
我正在尝试使用 socket.io 和 socket.io-client 节点模块,使用以下代码从一台服务器(作为主服务器)连接到另外 2 台服务器(作为从服务器,两者具有相同的代码):
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 中定义)并将每个套接字存储在一个对象中。
问题是,尽管我能够连接,但所有套接字似乎都来自最后一个主机,所以我最终是这样的:
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
所以我认为问题是套接字没有正确建立字段“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 错误,但经过数小时的尝试后我无法找到解决方案......
非常感谢
【问题讨论】:
标签: javascript node.js socket.io eval