sockets - Nodejs 流式传输

标签 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');

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”而不是两条消息“a”和“b”。

有什么“正确的方法”来解决这个问题吗?

最佳答案

TCP 是一个 协议(protocol)。管道一端的单个 write 可能导致另一端的多个“读取”,反之亦然。您必须通过在消息中包含长度来明确告诉对方您要发送多少字节;或提供易于识别的消息分隔符。无论如何,您需要循环阅读。

关于sockets - Nodejs 流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3335092/

相关文章:

c - 以下 strncpy 调用的解释

java - 如何在Android和Blackberry上进行HTTP广播流?

streaming - HLS 和 MPEG-DASH 有什么区别?

java - 通过 Java 播放实时流音频

javascript - 如何查询与 Knex.js 的关系?

Nodejs 上的 MySQL 连接池

python - 按 Ctrl+C 无法关闭套接字

java - 使用套接字读取 .accept() 时,我的服务器停止工作

python - Tornado 和基于Python的守护进程之间的最佳通信方式是什么?

javascript - 如何使用 Node.js 获取日志并将其写入文件?