2015-10-25 4 views
1

я получил этот кусок кода:Node.js process.nextTick еще блокирует сервер от получения запросов

import http from 'http'; 
 

 
function compute() { 
 
    let [sum, i] = [1, 1]; 
 
    while (i<1000000000) { 
 
    5*2 
 
    i++; 
 
    } 
 
    console.log("good"); 
 
    process.nextTick(compute); 
 
} 
 

 
http.createServer((request, response) => { 
 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
 
    response.end('Hello World'); 
 
}).listen(5000, '127.0.0.1'); 
 

 
http.request({hostname: '127.0.0.1', port: 5000}, (response) => { 
 
    console.log("here !"); 
 
}).end(); 
 

 
compute();

выход для этого всегда: «хорошо, "хорошо" .. . и запрос HTTP не дозвонился. я подумал, что process.nextTick должен решить эту проблему, но сервер по-прежнему заблокирован. Почему? Как я могу это исправить?

ответ

4

Вместо process.nextTick довольно использовать комплект setImmediate. Обратные вызовы, переданные в nextTick, обрабатываются перед обратными вызовами IO, тогда как обратные вызовы, переданные в setImmediate, обрабатываются после всех ожидающих.

Заменить process.nextTick(compute); на setImmediate(compute);.

Возможно также переключение работы центрального процессора на дочерний процесс или работника. Но я не буду описывать, что, как мой основной пункт был объяснить, как:

function compute() { 
    ... 
    console.log("good"); 
    process.nextTick(compute); 
} 

будет блокировать сервер HTTP от обработки запросов игнорируя while цикл, который имеет свою собственную проблему.

См. setImmediate vs. nextTick для получения дополнительной информации.

+0

спасибо! работал :) – Lironess

 Смежные вопросы

  • Нет связанных вопросов^_^