2015-11-24 43 views
3

我如何使用Node.js的net library建立一个基本的TCP套接字连接:有没有办法改变Node.js net(套接字)库中的“on”侦听器?

net.createServer(function (socket) { 
    socket.on("data", function (data) { 
     console.log("socket to me:", data); 
    }); 
}).listen(); 

有没有一种方法来删除或更改socket.on("data")听众,而不关闭连接?我尝试了明显的事情:

net.createServer(function (socket) { 
    socket.on("data", function (data) { 
     console.log("socket to me:", data.toString()); 
     socket.on("data", function (data) { 
      console.log("ouch"); 
     }); 
    }); 
}).listen(10101); 

当我从客户端连接:

var client = net.connect({host: "localhost", port: 10101}); 
client.write("boom!"); 

它打印socket to me: boom!,符合市场预期。但下一个写输出:

socket to me: boom! 
ouch 

有什么办法可以改变第一个侦听器,或删除它,并用一个不同的替换它?

+1

如果您已命名回调,您应该可以为'data'事件执行'.removeListener'并添加一个新的回调。 – Joe

回答

2

事实证明,编辑插座的_events对象直接让你换出听众,即使他们是匿名的。例如:

net.createServer(function (socket) { 
    socket.on("data", function (data) { 
     console.log("socket to me:", data.toString()); 
     socket._events.data = function (data) { 
      console.log("ouch"); 
     }; 
    }); 
}).listen(10101); 

然后在客户端:

var client = net.connect({host: "localhost", port: 10101}); 
client.write("boom!"); 
client.write("boom!"); 

输出:

socket to me: boom! 
ouch 

只是想我会在这里分享这一点,如果这是给别人有用!

1

如何在侦听器中使用条件?

var firstExecution = true; 

net.createServer(function (socket) { 

    socket.on("data", function (data) { 

     if (firstExecution) { 
      console.log("socket to me:", data.toString()); 
      firstExecution = false; 
     } 
     else { 
      console.log("ouch"); 
     } 
    }); 
}).listen(10101); 
+1

是的,这就是我现在正在做的!我正在通过套接字发送JSON,所以我给它添加了一个标签,并且在监听器中有一个巨大的,越来越笨重的开关。是什么促使我问这个问题,是想把这个逻辑稍微调整一下。我可以证实,一个大的脂肪条件确实工作正常,但:) – tinybike

相关问题