如何在父级和(分叉)子级之间共享TCP套接字对象?

时间:2019-06-13 18:46:52

标签: node.js sockets tcp fork

我有一个应用程序,其中我的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的新手,我认为代码中可能存在错误。谢谢。

0 个答案:

没有答案