У меня датчик Arduino + EMG, подключенный к Express серверу. Сервер использует модули «johnny-five» и «socketIo» для подключения к плате и отображает данные датчика. В настоящее время данные поступают нормально, однако проблема в том, что соединение Socket, по-видимому, очень часто прерывается и повторно подключается, что задерживает отправку данных на интерфейс React (также обслуживаемый сервером Express).
Код в файле сервера выглядит следующим образом:
board.on("ready", () => {
const mySensor = new five.Sensor("A0");
io.on("connection", socket => {
console.log("New client connected");
mySensor.on("change", function(event) {
socket.emit("emg", event);
}
});
socket.on("disconnect", () => console.log("Client disconnected"));
});
});
Вывод на консоль выглядит так:
{ x: 8769, y: 960 }
{ x: 8770, y: 960 }
{ x: 8771, y: 960 }
{ x: 8772, y: 960 }
{ x: 8773, y: 960 }
New client connected
New client connected
New client connected
New client connected
New client connected
New client connected
New client connected
New client connected
{ x: 8774, y: 959 }
{ x: 8775, y: 959 }
Где 'x' - это общий c счетчик и ' y '- данные датчика (в масштабе 1-1000).
Я понимаю, что узел ограничивает количество слушателей события, так как я также получаю следующую ошибку
MaxListenersExceededWarning: Possible EventEmitter memory leak detected.
Я считаю, что происходит: - Соединение происходит - Он отправляет данные - Соединение разорвано - Новое соединение установлено - Старые прослушиватели событий не удалены, следовательно, ошибка узла.
Я также считаю, что само сокетное соединение должно иметь возможность обрабатывать частоту данных, поэтому я не уверен, почему соединение обрывается.
Я пытался отложить различные части процесса в Чтобы ограничить количество отправляемых данных, если это проблема, но это не сработало.
Итак, мой вопрос: как предотвратить разрыв соединения или, если это произойдет, как очистить старые соединения, чтобы хотя бы устранить ошибку узла?