#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., Если вы хотите использовать несколько потоков, вам нужно создать несколько рабочих потоков, получить порцию данных, а затем, когда у вас будет целый блок данных, вы должны передать его рабочему потоку для обработки. Для этого вам нужно написать код.