IPC:Node js服务器与简单的C代码通信



我有一个C代码,它在无限循环中等待输入并产生输出。

#include<stdio.h>
void flush() {
int c;
while ((c = getchar()) != 'n' && c != EOF);
}
int main() {
/*
*  Load many files here
*/
double d = 0;
char input[1024];
while (1) {
d = d + 0.1;
scanf("%[^n]", input);        
printf("%lfn",d);
fflush(stdout);
flush();
}
}

我需要另一个 Node JS 服务,它将在某个端口上侦听并将输出作为响应发送。 我写了这个代码

var http = require('http');

var spawn = require('child_process').spawn;
var child = spawn('./dummyNLU.out');
child.stdin.setEncoding('utf-8');
child.stdin.cork();
var buffer = new Buffer(100);
var app = http.createServer(function(req,res){
var string = buffer.write("HelloWorld!"); //this is for testing purpose
child.stdin.write(buffer);
child.stdin.end();
child.stdout.on('data', function(data) {
res.setHeader('Content-Type', 'text/plain');
res.end(data);
});
});
app.listen(3001);

我拥有的这段代码似乎根本不起作用。

Node JS 服务器终止并显示错误,Web 响应由 283 行响应组成,而不是 1 行。

谁能帮我??也欢迎其他一些解决问题的方法(从 C 可执行代码输出回复 Web 请求)。 提前谢谢你。

child_process.spawn

从 Node 生成您的 C 代码二进制文件作为子代码(双向通信)

var spawn = require('child_process').spawn
var child = spawn('main.exe')   
child.stdin.end('7')
child.stdout.on('data', (data) => { console.log(data); })
child.on('close', (code) => console.log('Exit code: ' + code))

如果它收到多个 simultaneos 请求,这可能会很棘手,您将需要跟踪客户端(源请求)以执行正确的响应(回答正确的请求客户端)

或者创建一个队列并为每个请求生成一个子级(一次最多有X个 simultaneos 子级工作),以便根据请求生成它们并在不需要时杀死它们(使用 queu 是为了限制活动 C 进程的总数)

PoC节点生成子命令 (ls) 并打印生成进程的结果(stdout)

const spawn = require('child_process').spawn 
const C = spawn('ls');let r='' 
C.stdout.on('data',d=>r+=d) 
C.on('close', () => console.log(r)); 
<小时 />

streaming-worker

旨在为您提供一个简单的发送和接收界面 来自长时间运行的异步C++节点.js插件的事件/消息。

将数据从 C 流式传输到节点.js

相关内容

  • 没有找到相关文章

最新更新