node.js - 处理来自 process.stdout 'data' 事件的分块响应

标签 node.js

我有一些我似乎无法修复的代码。它看起来如下:

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 大小的消息都将被分块。有两种方法可以处理此问题。

  1. 如果在开始从 C 流出之前知道总输出大小,请将消息长度添加到数据之前,以便 Node 进程知道在终止整个消息之前要提取多少 block 。
  2. 确定一个特殊字符,您可以将其附加到您从 C 程序发送的消息中。当 Node 看到该字符时,您将结束该消息的输入。

关于node.js - 处理来自 process.stdout 'data' 事件的分块响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243810/

相关文章:

node.js - 在 Angular 6 中导出到 Excel 或 CSV

node.js - 如何在 CasperJS 运行的文件中使用 NPM 模块?

javascript - 为什么我的类构造变量在声明后保持未定义状态?

javascript - Node : Send Response after MongoDB Document has been updated or created

node.js - 在 Mongoose 中将数组更新到文档中

javascript - 将缓冲区从 ReadStream 更改为实际文件

exception - 在哪里捕获此错误?

node.js - 为什么即使从官方网站安装 npm(以及一般程序)也会出现弃用问题?

javascript - 在nodejs中向客户端发送响应

javascript - 生成唯一的随机数以在 Express EJS( Node )中执行随机图像