我遇到了一些问题,当它第二次分叉时,试图将数据发送到子进程。
以下是我正在尝试做的示例代码:
var child_process = require("child_process");
var io = require("socket.io")(app); //app contains http server
var pageSocket = io.of('/somePage');
io.on("connection", function(socket){
var child = child_process.fork('./sample.js');
socket.on('some:event', function(){
child.send({key: value});
});
child.on('message', function(data){
//Do something
});
child.on('exit', function(code, signal){
if (signal === 'SIGTERM') {
socket.emit('page:closed');
}
});
socket.on('page:close', function(){
child.kill("SIGTERM");
});
});
我做了一个非常简单的例子,因为所有socket函数都在工作。在客户端调用事件page:closed
后,我的应用程序与套接字断开连接并更改页面。当我回到那个pageSocket
时,它再次连接,孩子被分叉(我对孩子做了一个console.log
,只是为了确定)但是,当some:event
被安排时,服务器尝试调用child.send
我收到以下错误:
Error: closed channel
我已尝试将SIGHUP
,SIGKILL
和SIGINT
作为信号传递给.kill
方法,并尝试使用process.exit(0)
<关闭孩子。 / p>