pipe理多个TCP套接字nodejs

我有一个这样的数组:

var exports = module.exports = {}; var net = require('net'); exports.config = [ { ip: "127.0.0.1", id: 1, socket: new net.Socket(), data: "", }, { ip: "192.168.5.242", id: 2, socket: new net.Socket(), data: "", } ]; 

我试图用这个代码连接每个这个项目与TCP套接字:

 for(var key in tornelli.config) { tornelli.config[key].socket.connect(4000, tornelli.config[key].ip, function() { console.log('CONNECTED TO: '+tornelli.config[key].ip); }); tornelli.config[key].socket.on('data', function(data) { ........... }); tornelli.config[key].socket.on('error', function(error){ console.log(error); }); } 

但有些事情因为在控制台输出中得到了错误

 CONNECTED TO: 192.168.5.242 

但实际上我与“127.0.0.1”连接。 看来,我不分离每个TCPstream。 我怎么能有两个单独的TCPstream,这个数组中的每一个项目?

这是关于asynchronous执行的东西?

谢谢

在JavaScript中, for循环不是“块”。 你可以把var放在那里,但是它仍然会被“挂起”到你的函数的顶部。 在你的初始函数调用中一切都很好 – key是0,然后是1,循环将运行两次。 但是,当执行CALLBACKS时, key将始终为1 – 它的最后一个值。 callback是asynchronous的,所以在for循环完成之后它们会被很好地解雇。

Javascript有一个forEach运算符,使这样的任务更简单。 尝试以下操作(或者简单地将你的套接字处理代码分解为一个以configuration块为参数的函数):

 tornelli.config.forEach(function(config) { config.socket.connect(4000, config.ip, function() { console.log('CONNECTED TO: '+config.ip); }); config.socket.on('data', function(data) { ........... }); config.socket.on('error', function(error){ console.log(error); }); } 

对于什么是值得的,在configuration文件中预先创build套接字也是非常不寻常的。 更为标准的模式是在上面的代码中执行new net.Socket()调用,而不是在configuration文件中。