Следует ли мне использовать многопоточность моего Node JS веб-сервера? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть простой 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 достаточно способен справиться со всем этим в фоновом режиме в нескольких потоках, не беспокоя меня?

...