С сервером Node.js Tcp, как объединить задержанную телеграмму вместе - PullRequest
0 голосов
/ 18 января 2019

Я хочу использовать Node.js, чтобы написать tcp-сервер для проверки телеграммы, отправленной другой программой.

Мы сделали следующее: 1. Мы определили несколько телеграмм разной длины и содержания 2. Для каждой телеграммы в начале у нас есть заголовок телеграммы фиксированной длины, два байта в двоичном виде для длины телеграммы включают заголовок, два байта в двоичном обозначении для идентификатора телеграммы. Поэтому, когда я что-то получаю от клиента, я могу проверить заголовок входящего сообщения и найти идентификатор телеграммы, затем я могу декодировать сообщение с заранее определенным определением идентификатора.

Решение работает нормально, пока мы не получим длинное сообщение длиной около 500 байт.

    var net = require('net');

    var server = net.createServer(function(socket){

        console.log('socket connected!');

        socket.on('data', function(data){
            processTelegram(data);
        });

        socket.on('close', function(){
            console.log('client disconnected');
        });

        socket.on('error', function(){
            console.log('error happened ');
        });
    });

server.listen(4300);

я буду вызывать processTelegram для обработки входящего сообщения, но я обнаружил, что сначала всегда получаю 400 байтов, а потом 100 байтов, когда длина телеграммы составляет 500 байтов, другими словами: вызывается socket.on ('data') два раза.

Мой вопрос: 1. что является триггером для socket.on ('data')? Как мы знаем, сообщение, полученное из сокета tcp, похоже на поток, поэтому когда node.js решает вызвать socket.on ('data')? когда какой-то внутренний буфер заполнен или через некоторый интервал из потока не приходят новые данные?

  1. в моей ситуации, 500-байтовый поток запускает socket.on ('data') два раза, я хочу сделать небольшую задержку, чтобы я мог обработать все 500 байтов вместе, хотя socket.on ('data') быть вызванным два раза. Кто-нибудь может дать представление, как это сделать? заранее спасибо.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...