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失效呢???