我有一些我似乎无法修复的代码。它看起来如下:
var childProcess = require('child_process');
var spawn = childProcess.spawn;
child = spawn('./simulator',[]);
child.stdout.on('data',
function(data){
console.log(data);
}
);
这一切都在我运行特定类型模拟的网络应用程序的后端。模拟器可执行文件是一个 c 程序,它运行一个循环等待传递数据(通过其标准输入)当输入进入模拟(即来自客户端)时,我解析输入,然后将数据写入子进程标准输入如下:
child.stdin.write(INPUTS);
现在返回的数据是 40,000 字节。但数据似乎被分成 8192 字节的 block 。我试过修复 c 程序的标准输出缓冲区,但没有修复。我想知道 node.js 强加的“数据”事件的大小是否有限制?我需要它作为一个 block 返回。
最佳答案
缓冲区 block 大小在 Node 中应用。您在 Node 之外所做的任何事情都无法解决问题。如果不在您的消息传递协议(protocol)中做一些额外的工作,就无法从 Node 获得您想要的东西。任何大于 block 大小的消息都将被分块。有两种方法可以处理此问题。
- 如果在开始从 C 流出之前知道总输出大小,请将消息长度添加到数据之前,以便 Node 进程知道在终止整个消息之前要提取多少 block 。
- 确定一个特殊字符,您可以将其附加到您从 C 程序发送的消息中。当 Node 看到该字符时,您将结束该消息的输入。
关于node.js - 处理来自 process.stdout 'data' 事件的分块响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243810/