Node.js:如何刷新socket?

时间:2012-01-22 00:07:08

标签: sockets node.js

我正在尝试在发送下一个数据块之前刷新套接字:

var net = require('net');

net.createServer(function(socket) {
    socket.on('data', function(data) {
        console.log(data.toString());
    });
}).listen(54358, '127.0.0.1');

var socket = net.createConnection(54358, '127.0.0.1');

socket.setNoDelay(true);
socket.write('mentos');
socket.write('cola');

但是,尽管有setNoDelay选项,但这不起作用,例如打印“mentoscola”而不是“mentos \ ncola”。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

查看WriteableStream api以及相关示例,您似乎应该自己设置中断或分隔符。

exports.puts = function (d) {
  process.stdout.write(d + '\n');
};

因为您的套接字是一个流,所以在没有您直接控制的情况下将会写入/读取数据,并且#write不会更改您的数据或假设您在写入之间中断,因为您可能正在流式传输套接字上的大量信息,可能想要设置其他分隔符。

我绝对不是这方面的专家,但这对我来说似乎是合乎逻辑的答案。

修改:这是Nodejs streaming的副本,其结论与我指定的答案相同:使用流不是逐行的,设置你的自己的分隔符。

答案 1 :(得分:0)

也许所有写在同一刻度线上的数据都是批量发送的。

可能在接收端,节点将在发出数据事件之前组合单独的数据段。