У меня есть приложение, в котором мой модуль 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, я предполагаю, что в коде могут быть ошибки. Благодаря.