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文件中。
- ExpressJS,MongoDB + Socket.IO – 识别单个用户会话
- 在通过file.createWriteStream()传输到GCP时,获取ESOCKETTIMEOUT,ECONNRESET或套接字会挂载大文件。
- 带有SSL的node.js和socket.io
- 如何解决在sails.js的SocketIO握手过程中没有可用的有效会话?
- this.zone.run() – Nzone的错误
- Socket.io通道和消息callback
- Node.js socket.io为单个事件返回多个值
- Node.js与Socket.io – 长轮询失败,并抛出“代码”:1,“消息”:“会话ID未知”响应
- 通过套接字发送base64编码图像