Nodejs流媒体

Dan*_*Dan 12 sockets streaming node.js

我想用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');
Run Code Online (Sandbox Code Playgroud)

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.");
});
Run Code Online (Sandbox Code Playgroud)

当我运行client.js时,我有时只得到一条消息'ab'而不是两条消息'a'和'b'.

是否有一些'正确的方法'来处理?

Nik*_*sov 12

TCP是一种协议.write管道一端的单个可以导致另一端的多个"读取",反之亦然.您必须通过在消息中包含长度来明确告诉另一方您要发送多少字节; 或提供易于识别的消息分隔符.在任何情况下,您都需要循环读取.

  • 您必须将其视为流.在它们到来时解析字节,在找到完整消息时做出反应. (2认同)