Потоковая передача Nodejs

Я хочу понять простое использование соединения клиент-сервер Nodejs. Но я встретился со следующей проблемой.

Рассмотрите код

server.js:

var net = require('net'),
    sys = require('sys');

    net.createServer(onConnection).listen(8124);

    function onConnection(socket) {
     socket.setNoDelay(true);

     socket.addListener("connect", function () {
      sys.puts('client connected: ' + this.remoteAddress);
     });

     socket.addListener("data", function (data) {
      sys.puts("message: \n" + data + "\n - end of msg.");
     });

     socket.addListener("end", function () {
      sys.puts('end of connection');
      this.end();
     });
    }

    sys.puts('Server running at 127.0.0.1:8124');

client.js:

var net = require('net'),
 sys = require('sys');

var stream = net.createConnection(8124);
stream.addListener("connect", function(){
 sys.puts('connected');

 stream.write('a');
    stream.flush();
 stream.write('b');
    stream.flush();

});

stream.addListener("data", function(data){
 sys.puts("Message: \n" + data + "\n - end of msg.");
});

Когда я выполняю client.js, я иногда получаю только одно сообщение 'ab' вместо двух сообщений и 'b'.

Есть ли некоторый 'правильный метод' для контакта с этим?

12
задан Dan 26 July 2010 в 13:14
поделиться

1 ответ

TCP - это потоковый протокол. Одиночная запись на одном конце трубы может привести к многочисленным "чтениям" на другом конце, и наоборот. Вы должны либо явно сообщить другой стороне, сколько байт вы отправляете, включив длину в сообщение; либо предоставить легко распознаваемые разделители сообщения. В любом случае вам нужно читать в цикле.

12
ответ дан 2 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: