我正在通过node.js服务将远程客户端连接到c应用程序,当从node.js应用程序输出时,无法将printf()
语句与c应用程序分开。
当printf()
语句快速连续发生时,node.js应用程序将它们一起打印。这会导致客户端解析该输出时出错。
由于我是c语言的新手,并且还很早就在node.js中学习,因此我的测试使我猜测到该问题与node.js如何处理stdout
中的child_process
流有关
我还应该注意,输出并非始终是错误的。在代码中的一些地方,它更具可变性,并且与用户输入的速度相关(这是针对游戏的)。我在下面分享的示例是输出始终最不正确的情况。
我尝试过:
setvbuf
调整c中的缓冲区大小(来自node.js应用程序的意外结果)spawn
和exec
的同步和异步版本的c应用程序(来自node.js应用程序的意外结果)这是c应用程序的一部分:
void readPin(int outputPin){
if(output[lightPins[light]] == outputPin){
reportGameStatus("light match");
lightSuccess();
}
...
}
void lightSuccess(){
reportGameStatus("light success");
...
}
void reportGameStatus(char* event){
printf("{"
"\"event\":\"%s\","
"}\n",
event
);
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"}