2015-01-31 2 views
1

Насколько я понимаю, Node.js является однопоточным и обрабатывает каждый запрос по одному. Однако при выполнении асинхронных вызовов он должен иметь возможность обрабатывать новые запросы, пока обратные вызовы еще не вызваны.Node.JS - Обработка входящих запросов с помощью функций Async

Итак, когда я делаю запрос 3 одновременно на следующую реализацию сервера, почему он ждет 10 секунд для первого ответа, а затем 20 для второго и 30 для третьего ...?

var express = require('express');  
    var app = express(); 
    app.get('*', function(req, res) { 
     setTimeout(function(){ 
      res.end('done') 
     },10000) 
    }); 
    app.listen(8000); 
+1

Код выглядит нормально. Есть что-то еще, ограничивающее одновременные соединения с одного IP-адреса, будь то браузер или сервер, я не уверен. – alandarev

+0

Спасибо alandarev, попробовал его из разных браузеров, и это было действительно асинхронно, вы правы. – yosiweinreb

+1

Ваш код отвечает на каждый запрос с задержкой в ​​10 секунд. Если вы отправляете 3 запроса напрямую один за другим, вы получите 3 ответа через 10 секунд, сразу один за другим. Если вы видите другое поведение, то это не из-за кода, который вы показываете. – Tomalak

ответ

1

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

var http = require('http'); 

function test(timestamp) { 
    http.get('http://127.0.0.1:8000',function(res) { 
      console.log(new Date() - timestamp); 
    }); 
} 


for (var i = 0 ; i < 5 ; i++) { 
    test(new Date().getTime()); 
} 

я получаю следующий результат (используя код как http-сервер):

> node test.js 
10032 
10029 
10029 
10029 
10030 

Похоже, что проблема не в том, что вы - код node.js.

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