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文件中。
- Node.js – Socket.io – Express 3
- ELB上的套接字io需要连接到应用程序服务器的所有实例
- 有两个node.js服务器的Socket.io?
- node.js http服务器响应套接字写入事件?
- 如何从客户端socket.emit serverside socket.io捕获命名空间的来源
- Express / torrent-stream:从stream中写入文件,使用url将套接字发送给客户端,但客户端无法find文件
- Nodejs TCP套接字在结束时不包含remoteAddress信息
- socket.io手动添加用户到空间(node.js)
- 结合套接字,并使用快递中间件时expression?