有没有办法改变“;关于“;Node.js net(Sockets)库中的侦听器

Is there a way to change the "on" listeners in the Node.js net (Sockets) library?

本文关键字:Sockets 侦听器 js 改变 关于 有没有 Node net      更新时间:2023-09-26

我正在使用Node.js的网库来设置一个基本的TCP套接字连接:

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

有什么方法可以更改第一个侦听器,或者删除它并用另一个侦听器替换它吗?

事实证明,编辑套接字的_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

我只是想在这里分享一下,以防对其他人有用!

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

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);