nodejs net.createServer传入大量数据

我有nodejs侦听TCP端口,并从Flash XMLSocket获取内容。 如果我尝试从闪存( XMLSocket.send(long_message) )的一条消息中推送大量的数据,我总是以事件stream.on("data", function(d) {开火,当我希望它发生时消息被传递Flash的XMLSocket传输数据为UTF8编码的string,以空字节结束如何控制消息的一致性?

UPDATE

我在这里发现了类似的问题。 但是没有明确的答案。 我知道我的消息的结尾应该是空字节,但是请给我一个关于如何存储不完整消息并避免与下一个/并发消息重叠的例子

UPDATE2

在maerics的回答之后,我做了类似的事情

  var server = net.createServer(function(stream) { var dataBlock = ""; stream.on("data", function(d) { processChunk(d); }); function processChunk(data) { var chunks = data.split("\0"); while (chunks.length > 1) { if (dataBlock.length > 0) { dataBlock += chunks.shift(); processIncompingMessage(dataBlock); dataBlock = ""; } else { processIncompingMessage(chunks.shift()); } } dataBlock += chunks.shift(); } } 

以下是我要做的(testing):

 var net = require('net'); var server = net.createServer(function (conn) { var msg = ''; // Current message, per connection. conn.setEncoding('utf8'); conn.on('message', function (m) { console.log('MESSAGE: ' + m); }); conn.on('data', function (data) { msg += data.toString('utf8'); if (msg.charCodeAt(msg.length - 1) == 0) { conn.emit('message', msg.substring(0, msg.length - 1)); msg = ''; } }); }); 

请注意,可能多个空分离的消息可能被编码在单个数据块中,因此您应该扩展此示例,以空字符分隔数据并分别处理每个数据块。 此外,您可能需要在连接'end'事件上处理最终的,可能不完整的消息。

Interesting Posts