Я хочу использовать 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')? когда какой-то внутренний буфер заполнен или через некоторый интервал из потока не приходят новые данные?
- в моей ситуации, 500-байтовый поток запускает socket.on ('data') два раза, я хочу сделать небольшую задержку, чтобы я мог обработать все 500 байтов вместе, хотя socket.on ('data') быть вызванным два раза. Кто-нибудь может дать представление, как это сделать? заранее спасибо.