为何socket.unpipe方法无效?
发布于 10 年前 作者 wangjingbo 3452 次浏览 最后一次编辑是 8 年前 来自 问答

1、服务器代码:

var net=require(‘net’); var file=require(‘fs’).createWriteStream(’./message.txt’); var server=net.createServer(); server.on(‘connection’,function(socket){ socket.pause(); //暂停 socket.pipe(file);
setTimeout(function(){ console.log(‘开始吧’); socket.resume(); //10秒后开始进行读取 }, 10000);

 socket.on('data',function(data){  
      console.log('客户端触发data事件,数据为:'+data.toString());    
     if(data.toString()=='q'){       
       socket.unpipe(file);         //此处无法取消指定pipe隧道 ???????
       console.log('unpipe....');
     }                        
});

}); server.listen(8431,‘localhost’);

2、客户端测试: telnet 127.0.0.1 8431 输入数据:2222222222 等待10秒后 输入数据:q333

3、message.txt结果:2222222222q3333

问题:message.txt结果中的333就不应该出现,为何出现了? 多次测试,都是这样。取消setTimeout函数,就一切正常。但不能取消他,否则就达不到延迟写入的效果了。 为什么有setTimeout函数,就会导致socket.unpipe失效呢???

回到顶部