Подключение к нескольким сокетам для TCP-сервера, как масштабировать с помощью рабочего потока в Nodejs

#node.js #nodejs-stream #worker-thread #node-worker-threads

#node.js #nodejs-stream #рабочий поток #узел-рабочие потоки

Вопрос:

У меня есть следующий код, так как существует N последовательных потоков отправки сокетов. как масштабировать это с помощью рабочих потоков в nodejs.

 const Net = require('net');
const port = 8080;
const server = new Net.Server();
const processor = require('processor.js');

server.listen(port, function() {
    console.log(`Server listening for connection requests on socket localhost:${port}`.);
});

server.on('connection', function(socket) {
    console.log('A new connection has been established.');
    
    let connectionInfo = {};
    connectionInfo.id = `${socket.remoteAddress}:${socket.remotePort}`;
    connectionInfo.partialBuffer= undefined;

    socket.on('data', function(chunk) {
        let chunkBuffer = Buffer.from(chunk);
        if(connectionInfo.partialBuffer){
            chunkBuffer = Buffer.concat([connInfo.partialBuffer, chunkBuffer]);
        }
        processor.processChunk(connectionInfo, chunkBuffer); // set connectionInfo.partialBuffer in processChunk() function 
    });

    socket.on('end', function() {
        console.log('Closing connection with the client');
    });

    socket.on('error', function(err) {
        console.log(`Error: ${err}`);
    });
});
  

Комментарии:

1. Вероятно, вы переместились бы processor.processChunk() в набор потоков и отправили бы сообщение chunkBuffer ожидающему потоку для его обработки. При этом вам нужно будет знать о проблемах параллелизма с connectionInfo .

2. Как я уже сказал, поток является последовательным, поэтому фрагмент 1 должен обрабатываться полностью, а оставшийся фрагмент буфера добавляется к следующему фрагменту 2. Есть ли какой-либо способ прослушивать полные фрагменты сокета выделенным потоком.

3. Я не знаю, что означает «прослушивание полных фрагментов выделенным потоком».

4. вы пропустили «сокет», может ли поток одного сокета (клиента) обрабатываться выделенным потоком. сокет (клиент) / поток.

5. Хорошо, я не знаю, что означает «прослушивание полных фрагментов сокета выделенным потоком». Я не понимаю вашего вопроса и не могу помочь, пока вы не объясните более подробно, с чем вам нужна помощь. Данные из одного сокета поступают в один экземпляр nodejs и обрабатываются основным потоком Javascript в этом экземпляре nodejs., Если вы хотите использовать несколько потоков, вам нужно создать несколько рабочих потоков, получить порцию данных, а затем, когда у вас будет целый блок данных, вы должны передать его рабочему потоку для обработки. Для этого вам нужно написать код.