Я регистрирую устройство GPS с помощью node.js, и у меня странное поведение.
Мой код сервера очень прост
var net = require('net');
var server = net.createServer(function(socket) {
var imei;
console.log("Socket: " + socket.remoteAddress + ":" + socket.remotePort);
socket.on("data", function(data){
var txt = data.toString("utf-8");
console.log(txt);
if(!imei){
imei = parseInt(txt.split("imei:")[1]);
}
// login device
if(txt.startsWith("##") && txt.endsWith(",A;")){
socket.write('LOAD');
// heartbeat
}else if(parseInt(txt) == imei){
socket.write(`ON`);
}
socket.pipe(socket);
});
socket.on("end", function () {
console.log("out!")
});
});
server.listen(8888);
После входа в систему устройства GPS,он посылает сердцебиение каждую минуту, я работаю только с одним устройством, так что это только один клиент.
Вывод сервера выглядит так:
Socket: ::ffff:191.000.000.000:9292 // new client
##,imei:000000000000000,A; // login
000000000000000; // heartbeat
000000000000000;
000000000000000;
000000000000000;
000000000000000;
000000000000000;
000000000000000;
000000000000000;
(node:12684) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 end listeners added. Use emitter.setMaxListeners() to increase limit
Как видите,после некоторых сообщений он показывает MaxListenersExceededWarning
, но я запутался, если только один клиент подключен, почему я вижу это сообщение?что-то не так с кодом?Как я мог решить эту проблему?
РЕДАКТИРОВАТЬ:
после добавления флага --trace-warnings
Я вижуэти выходные данные:
(node:8592) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 end listeners added. Use emitter.setMaxListeners() to increase limit
at _addListener (events.js:280:19)
at Socket.addListener (events.js:297:10)
at Socket.Readable.on (_stream_readable.js:772:35)
at Socket.once (events.js:341:8)
at Socket.Readable.pipe (_stream_readable.js:580:9)
at Socket.<anonymous> (server.js:30:16)
at emitOne (events.js:121:20)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
Строка 30 кода сервера: socket.pipe(socket);