Nodejsstream媒体

我想使用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是一个stream协议。 在pipe道的一端单独write可能导致另一端有多个“读取”,反之亦然。 你必须通过在消息中包含长度来明确地告诉对方多less个字节。 或提供容易识别的消息分隔符。 无论如何,你需要阅读一个循环。