Dmy*_*nko 4 actionscript-2 node.js
我让 nodejs 监听 tcp 端口并从 Flash XMLSocket 获取内容。如果我尝试从 flash ( XMLSocket.send(long_message)) 的一条消息中推送大量数据,我总是最终stream.on("data", function(d) {触发事件,而我希望在传输整个消息时发生。Flash 的 XMLSocket 将数据作为以空字节结尾的 UTF8 编码字符串传输。如何控制我的消息一致性?
我在这里找到了类似的问题。但没有明确的答案。我知道我的消息的结尾应该是空字节,但是你能给我一个关于如何存储不完整消息并避免与下一条/并发消息重叠的例子吗?
在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我会做的(经过测试):
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 = '';
}
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,多个空分隔消息可能会编码在单个数据块中,因此您应该扩展此示例以将数据用空字符分隔并分别处理每个消息。此外,您可能希望处理有关连接'end'事件的最终可能不完整的消息。
| 归档时间: |
|
| 查看次数: |
4458 次 |
| 最近记录: |