Я застрял в кластере nodejs - PullRequest
0 голосов
/ 23 октября 2019

Я изучаю кластер. Мой учитель демонстрировал мне, почему использовать кластер. Например, учитель выполнил следующий код:

const cluster = require('cluster');
const express = require('express');

if (cluster.isMaster) {
    for (let i = 5; i--;)
        cluster.fork();
} else {
    const app = express();
    // Handling routes
    app.get('/', (req, res, next) => {
    const start = Date.now();
    while ((Date.now() - start) < 4000);
    return res.send('This route had taken almost 4s to load...')
    })

    app.get('/fast', (req, res) => res.send('I am fast'));

    app.listen(3000);
}

Теперь, в машине учителя, когда Sir отправляет запрос в '/', он блокирует цикл обработки событий ... Я имею в виду, что Sir отправлял запрос в '/быстрый », но он не работал на компьютере учителя до тех пор, пока не завершился маршрут« / »(через 4 секунды) ...

Но на моей машине, когда я пытался запустить тот же код, это былоне тот случай, когда я отправил запрос на '/', он не заблокировал цикл обработки событий, и отправка запроса по другим маршрутам работала как обычно ... Я подумал, что может быть какое-то экспресс-обновление, которое делает все это заСцена, поэтому я попытался обработать запрос с использованием стандартного модуля http следующим образом:

const http = require('http');

const server = http.createServer((req, res) => { 
    if (req.url === '/') { 
        const start = Date.now();
        while ((Date.now() - start) < 4000);
        return res.end("Hello world");        
    }

    if (req.url === '/fast') { 
        return res.end("This is fast...");
    }
});

server.listen(3000);

Результат был таким же ...

Так что использование кластера бесполезно? Есть ли проблема в моем коде? Или есть какое-либо обновление nodejs, которое не блокирует цикл событий.

...