Почему мой клиент Socket.io отключается и повторно подключается с сервера Express? - PullRequest
1 голос
/ 30 января 2020

У меня датчик 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. 

Я считаю, что происходит: - Соединение происходит - Он отправляет данные - Соединение разорвано - Новое соединение установлено - Старые прослушиватели событий не удалены, следовательно, ошибка узла.

Я также считаю, что само сокетное соединение должно иметь возможность обрабатывать частоту данных, поэтому я не уверен, почему соединение обрывается.

Я пытался отложить различные части процесса в Чтобы ограничить количество отправляемых данных, если это проблема, но это не сработало.

Итак, мой вопрос: как предотвратить разрыв соединения или, если это произойдет, как очистить старые соединения, чтобы хотя бы устранить ошибку узла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...