У меня есть простой Node.JS HTTPS-сервер, использующий socket.io. Пользователи могут отправлять на сервер много различной информации. Через несколько секунд веб-сервер может получить несколько однострочных объектов на веб-сервер от одного пользователя (например, { code: '124' }
, но может быть несколько пользователей, делающих это одновременно. Затем веб-сервер возвращает информацию всем пользователям в эта комната socket.io.
По мере поступления этой информации веб-сервер периодически сохраняет эти данные в простой базе данных MySQL, хотя я ограничиваю сохранение, чтобы не было нескольких небольших MySQL записей на второй или что-то в этом роде.
Я считаю, что по мере того, как все больше пользователей входят в систему и подключаются к веб-серверу, код может блокироваться, поскольку Node.JS является однопоточным, и это может вызывать задержку в информации вернуться к пользователям в режиме реального времени, или это может вызвать проблемы с сохранением последних данных в базе данных. Я думал сделать что-то подобное, чтобы обновления базы данных обрабатывались отдельным веб-воркером -
socket.on('data', function(msg) {
try {
const newWorker = new Worker('./src/worker.js');
newWorker.on('message', function(result) {
io.to(`${socketID}`).emit('newData', result);
});
newWorker.on('error', (err) => {
io.to(`${socketID}`).emit('newData', { error: err });
console.dir(err);
});
newWorker.postMessage(msg);
} catch(e) {
console.log(e);
io.to(`${socketID}`).emit('criticalError', "We ran into an error - try refreshing");
}
});
Однако я знаю, что процессы asyn c могут выполняться в нескольких потоках в b Фон из Node.JS и Node.JS обычно весьма эффективен.
Мой вопрос: с учетом того, что может происходить несколько операций записи в базу данных одновременно, а также поступает несколько частей информации, которые затем необходимо отправить обратно пользователям в любую заданную секунду. , имеет ли мне смысл использовать веб-воркеры, чтобы сделать этот процесс многопоточным ? Или Node.JS достаточно способен справиться со всем этим в фоновом режиме в нескольких потоках, не беспокоя меня?