我有一个应用程序,其中我的TCP服务器模块(父级)侦听'connection'
事件,并在创建的套接字上接收一些数据,以与远程客户端进行握手。握手完成后,服务器需要将套接字对象发送给派生的孩子,派生的孩子也将向套接字发送和接收数据,执行一些操作,最后将结果发送给父对象并被杀死。由于某些原因,我需要将套接字对象保留在父级中,以便在子级完成之后无法在子级中执行进一步的数据处理。
我已经设法使用subprocess.send()
方法将套接字发送给子代,但是这样,套接字 handle 在父代中变成了null
。我尝试将keepOpen
选项设置为true
,它几乎有效,因为我可以发送套接字并仍在父级中使用它,但是似乎不能正常工作,因为子'data'
事件侦听器并不总是接收传入的数据。
在将套接字发送给子级之前,我还尝试了父级的removeListener
事件'data'
,但这没什么区别,有时数据仍会丢失(在另一些情况下,在意外延迟后可以正确接收到此信息)。此代码摘录说明了我正在尝试做的事情:
const net = require('net');
const server = net.createServer();
const cp = require('child_process');
server.on('connection', (socket) => {
socket.on('data', (data) => {
// Perform handhsake
const child = cp.fork('child.js');
child.on('message', (result) => {
console.log('CHILD finished processing: ', result);
child.kill('SIGHUP');
// Do more stuff with socket
});
child.send('socket', socket);
// (At this point, socket handle is null)
});
});
server.listen(PORT)
我是nodejs的新手,我认为代码中可能存在错误。谢谢。