Ada*_*dam 1 javascript http blocking node.js
我想我刚刚发现了一些与node.js或浏览器相关的东西.所以node.js应该是非阻塞的,但是一个简单的setTimeout阻塞了同一个客户端的整个网站.
// Create HTTP Server
var http = require('http');
// Create page number holder
var page = 0;
http.createServer(function (req, res) {
// Increment Page Number
page++;
// Log page load
console.log('LOAD PAGE', page);
// Set response header
res.writeHead(200, {'Content-Type': 'text/plain'});
// Wait 10 seconds and write Hello World message to client.
setTimeout(function(){ res.end('Hello World\n'); }, 10000);
}).listen(5000); // Listen on port 5000
// Log server start
console.log('Server running on port 5000.');
Run Code Online (Sandbox Code Playgroud)
所以我所说的是当我尝试使用两个选项卡在Chrome(版本25.0.1364.152)中打开http://mysite.com:5000/时,第一个选项卡必须在节点处理第二个选项卡之前完成.js文件.
Client: Open Tab1
> server console: LOAD PAGE 1
Client: Open Tab2
> server console: Nothing happens
Server: Wait 10 seconds
> server console: LOAD PAGE 2
Run Code Online (Sandbox Code Playgroud)
我希望node.js能够立即运行这两个请求,否则这不是非阻塞的.我已经使用Firefox 19对此进行了测试,因此浏览器的行为似乎与此相同.
那么发生了什么?我错过了什么?:OOOO
我只是在Safari(6.0.2)中运行测试并且它正常工作,因此这可能是Chrome和Firefox以及其他人的浏览器问题.
使用Node.js版本v0.6.17和v0.8.21进行测试
Roe*_*den 12
浏览器实现每个域名的并发连接限制.剪断:
浏览器通常将每台服务器的并发HTTP连接数限制为2(为简单起见,此处广泛使用术语"每服务器".例如,它可能是共享相同公共IP的多台物理机器.)浏览器会话已经有两个HTTP连接,任何进一步的连接请求都必须等到这两个HTTP连接中的一个完成.结果,浏览器(或应用程序)似乎被锁定.虽然"两个连接限制"在几年前有道理,它在今天的Ajax启用的"web 2.0"应用程序中是非常有问题的.
资料来源:http://www.openajax.org/runtime/wiki/The_Two_HTTP_Connection_Limit_Issue
节点没有阻塞,你的浏览器是.我建议使用apache基准测试(ab -c 10 -n 10)进行测试.
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |