Убрать лаг NodeJs SocketIO server - PullRequest
       146

Убрать лаг NodeJs SocketIO server

0 голосов
/ 02 августа 2020

В настоящее время я работаю над проектом, в котором ESP32 постоянно получает данные датчика и переводит их в строки слов перед отправкой на сервер NodeJS / SocketIO.

Пакет данных будет отправлен с ESP32 на сервер составляет 10 ~ 20 мсек с использованием timerInterrupt (). Проблема в том, что на стороне сервера скорость приема варьируется в пределах ~ 5 мс, а после отправки 3-10 пакетов возникает задержка, которая может go достигать 100 мс. Данные не теряются между пакетами, но я хочу, чтобы фаза передачи проходила как можно более плавно. Вы можете дать мне несколько решений? Библиотеку, которую я использовал в ESP32, можно найти здесь: https://github.com/robojay/Socket.io-v1.x-Library

Код сервера

function process(data) {
  var dataArr = [];
  var a1, a2, a3;
  var i = 0;
  while (i <= data.length) {
    var d = i/2;
    a1 = data.charCodeAt(i) - 65;
    a2 = data.charCodeAt(i+1) - 65;
    a3 = a1 << 4;
    dataArr[d] = a3|a2;
    i += 2;
  }
  return dataArr;
}

io.on('connection', function(socket)
{
  console.log("Detected connection from " + socket.id);
  var header, footer, stringlength, datacount, messtring, z;

socket.on("count", function(data) {

          header = data.message.slice(0,4);
          stringlength = processShortInt(process(data.message.substr(-8,4)));
          footer = data.message.slice(stringlength+4);

          if (header == "HIEU" && footer == "TUNG"){

              datacount = processByte(process(data.message.substr(-10,2)));
              messtring = data.message.slice(header.length,stringlength-2);

          for (z = 0; z < datacount; z++) {
              senddata = sorting(messtring).charAt(0) + sorting(messtring).slice(2);
              messtring = messtring.slice(parseInt(sorting(messtring).charAt(1))+2);
              ui_nsp.emit("frame", senddata);
        }
       }
     })
})

Функция sorting() использует Buffer.from(dataArr).read, чтобы преобразовать массив значений в исходное числовое значение, считанное на ESP32.

...