gpt4 book ai didi

javascript - 有没有办法更改 Node.js 网络(套接字)库中的 "on"监听器?

转载 作者:可可西里 更新时间:2023-11-01 02:33:57 28 4
gpt4 key购买 nike

我正在使用 Node.js 的 net library设置基本的 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

只是想我会在这里分享这个,以防它对其他人有用!

关于javascript - 有没有办法更改 Node.js 网络(套接字)库中的 "on"监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893472/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com