Node.js来自chid_process c应用程序的分组标准输出
我正在通过node.js服务将远程客户端连接到c应用程序,当从node.js应用程序输出时,我很难将Node.js来自chid_process c应用程序的分组标准输出,c,node.js,C,Node.js,我正在通过node.js服务将远程客户端连接到c应用程序,当从node.js应用程序输出时,我很难将printf()语句从c应用程序中分离出来 当printf()语句快速连续出现时,node.js应用程序将它们一起打印。这会导致客户端解析该输出时出错 由于我是c新手,并且还在node.js的早期阶段,我的测试让我猜测这个问题与node.js如何处理来自子进程的stdout流有关 我还应该注意到,输出并不总是不正确的。代码中有几个地方的变量更大,并且与用户输入的速度相关(这是针对游戏的)。我在下面
printf()
语句从c应用程序中分离出来
当printf()
语句快速连续出现时,node.js应用程序将它们一起打印。这会导致客户端解析该输出时出错
由于我是c新手,并且还在node.js的早期阶段,我的测试让我猜测这个问题与node.js如何处理来自子进程的stdout
流有关
我还应该注意到,输出并不总是不正确的。代码中有几个地方的变量更大,并且与用户输入的速度相关(这是针对游戏的)。我在下面分享的例子是,输出总是不正确的
我试过:
- 直接运行c程序。(这给了我预期的[正确的]结果)
- 使用
setvbuf
调整c中的缓冲区大小(node.js应用程序的意外结果)
- 使用同步和异步版本的
spawn
和exec
从节点运行c应用程序(node.js应用程序的意外结果)
下面是c应用程序的一部分:
stdout: {"event":"light match"}{"event":"light success"}
void readPin(int-outputPin){
if(输出[lightPins[light]]==outputPin){
报告游戏状态(“轻匹配”);
轻松成功();
}
...
}
void lightSuccess(){
报告游戏状态(“轻松成功”);
...
}
无效报告状态(字符*事件){
printf(“{”
“\“事件\”:\%s\,”
“}\n”,
事件
);
fflush(stdout);
}
下面是node.js部分:
var spawn = require("child_process").spawn;
var process = spawn("./cApplication");
process.stdout.on('data',function(msg){
console.log('stdout: ' + msg);
...
});
这将导致node.js应用程序产生以下输出:
stdout: {"event":"light match"}{"event":"light success"}
预期结果:
stdout: {"event":"light match"}
stdout: {"event":"light success"}
您列出的输出不是您的reportGameStatus()
函数打印出来的…@Shawn错误的输出是可变的,并不总是显示出来。在应用程序中有一些情况下,这种情况的发生不太一致,并且取决于用户输入的速度。然而,我在这里分享的案例始终是不正确的。我将用这些信息编辑帖子。您列出的输出不是您的reportGameStatus()
函数打印出来的…@Shawn错误的输出是可变的,并不总是显示出来。在应用程序中有一些情况下,这种情况的发生不太一致,并且取决于用户输入的速度。然而,我在这里分享的案例始终是不正确的。我会用这些信息编辑这篇文章。