Блокировка HTTP-запроса / ответного обратного вызова? - PullRequest
0 голосов
/ 18 декабря 2011

Я более или менее новичок в узле, и мне немного трудно разобраться в аспекте асинхронности обратного вызова запрос / ответ для метода http.createServer.

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

Однако в моем тестировании я обнаружил, что процесс блокировки выглядит как , он влияет на ответ другого запрашивающего клиента.

Я говорю это, потому что сообщение журнала "A new client!" появляется только после того, как первый запрос завершен.

var http = require('http');

http.createServer(function(req, res){

  console.log("A new client!");      

  var startTime = new Date().getTime();
  while (new Date().getTime() < startTime + 4000);

  res.writeHead(200, {"Content-type" : "text/html"});
  res.write("done");
  res.end();

}).listen("8888");

Я тестирую на localhost:8888 с несколькими вкладками в браузере.

1 Ответ

1 голос
/ 19 декабря 2011

Это связано не с блокировкой, а с тем фактом, что Node.js имеет цикл событий, что означает, что у него есть события, готовые к выполнению на следующем такте каждый раз.

Эти события are executed in order и могут иметь обратные вызовы.Приведенный выше код запускает веб-сервер с обратным вызовом, который запускается после выполнения запроса, и после этого в обратном вызове отображается сообщение (в консоли).

Вы можете проверить, что ясказал выше (о событиях в порядке) со следующим кодом:

server.js

var counter = 0;
var http = require('http');
http.createServer(function (req, res) {
  console.log(counter++);
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

Используйте инструмент Apache Benchmark для моделирования 100 одновременных соединений для этогосервер вроде так:

ab -n 100 -c 100 server.js

Вы увидите, что вы получите номера в порядке.

Ресурсы:

http://www.slideshare.net/brevoortm/nodejs-async-for-the-rest-of-ushttp://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/http://www.yuiblog.com/blog/2010/12/06/video-yuiconf2010-croucher/

...