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

标签 javascript node.js sockets tcp

我正在使用 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/

相关文章:

node.js - 将 Node js 应用程序部署到 MS azure 服务后出错

c - C 中的初学者套接字编程

javascript - Zurb Foundation 6 - 使用 jQuery 关闭模态框

javascript - 在 material-ui 中打开扩展面板时删除额外空间

node.js - 使用 socket.io 访问模型会导致主干 View 中的命名空间错误

javascript - 在列表中查找带有扩展名的文件名

c - TCP套接字上的POLLIN事件,但没有要读取的数据

c++ - recvfrom() 不返回接收到的字节数

javascript - setHours() javascript 返回与预期不同的格式

javascript - 在 req.params Node 中传入函数名称