Hãy mã này, tiêu biểu nút js ví dụ về một máy chủ Http, mà tôi đã thêm chậm trễ 5 giây để mô phỏng một số công việc async diễn ra ở một nơi khác:Tại sao setTimeout chặn ứng dụng Node.js của tôi?
const http = require('http');
const hostname = '127.0.0.1';
const port = 8080;
http.createServer((req, res) => {
setTimeout(()=>{
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
},5000);
}).listen(port, hostname,() => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Những gì tôi mong chờ là khi Tôi mở 5 tab, giả sử chậm trễ nửa giây giữa mỗi lần mở, máy chủ phải "trả lời" cho từng tab nhiều hơn hoặc ít hơn với thời gian này:
t=0s - I open first tab
t=0.5s - I open second tab
t=1s - I open third tab
...
t=5s - First tab stops loading, server has replied
t=5.5s - Second tab stops loading, server has replied
t=6s - Third tab stops loading, server has replied
t=6.5s - Fourth tab stops loading, server has replied
t=7s - Fifth tab stops loading, server has replied
Tuy nhiên, hành vi tôi thấy là như sau:
t=0s - I open first tab
t=0.5s - I open second tab
t=1s - I open third tab
...
t=5s - First tab stops loading, server has replied
t=10s - Second tab stops loading, server has replied
t=15s - Third tab stops loading, server has replied
t=20s - Fourth tab stops loading, server has replied
t=25s - Fifth tab stops loading, server has replied
Như thể các yêu cầu tiếp theo không bắt đầu chạy cho đến khi yêu cầu đầu tiên kết thúc. Am i thiếu cái gì ở đây? Tôi nghĩ toàn bộ vấn đề của Node JS là có thể chạy tync không đồng bộ từ một chủ đề duy nhất?
FYI, bạn cũng phải xem các yêu cầu favicon mà các trình duyệt muốn thực hiện cùng với yêu cầu trang. . – jfriend00