这是我的功能:
io.on('connection', function (socket) {
socket.on('checkcrn', function (msg) {
socket.on('error', function(err){
console.log("err + " + err);
})
console.log("message " + msg);
});
});
我要做的是调用相同的套接字但在另一个事件上的不同事件。这甚至可能还是我做错了什么?
答案 0 :(得分:1)
这是一个模仿代码的独立版本:
const EventEmitter = require('events').EventEmitter;
let socket = new EventEmitter();
socket.on('checkcrn', function (msg) {
socket.on('error', function(err){
console.log("err + " + err);
})
console.log("message " + msg);
});
socket.emit('checkcrn', 'hello world #1');
socket.emit('checkcrn', 'hello world #2');
socket.emit('error', 'error #1');
如果你运行它,你会看到err + error #1
被记录两次。更糟糕的是:如果您发送更多checkcrn
条消息,则您发送的每条checkcrn
消息都会收到额外的错误消息。这是因为您为每条error
消息添加了一个新的checkcrn
侦听器。
您可以通过将error
侦听器的声明移动到与checkcrn
侦听器相同的级别来解决该问题:
io.on('connection', function (socket) {
socket.on('checkcrn', function (msg) {
console.log("message " + msg);
});
socket.on('error', function(err){
console.log("err + " + err);
});
});
您将监听器附加到socket
仍然是相同的。{/ p>
答案 1 :(得分:0)
这是一个很好的例子,可以证明内存泄漏。
通过在其他事件侦听器中分配事件侦听器,您可以在捕获的每个新事件上创建新的处理程序(稍后不删除它们),这非常糟糕。
让听众保持在同一水平,一切都会好的。
仅供参考:如果您不需要跟踪某些类型的事件,您可以通过执行socket.removeListener('eventname', functionReference)