node.js またはブラウザーのいずれかで、本当に奇妙なことを発見したと思います。したがって、node.js はノンブロッキングである必要がありますが、単純な setTimeout は同じクライアントの Web サイト全体をブロックします。
これはサーバーコードです:
// 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.');
つまり、私が話しているのは、Chrome(バージョン 25.0.1364.152) でhttp://mysite.com:5000/を 2 つのタブで開こうとすると、2 番目のタブがノードによって処理される前に、最初のタブが終了する必要があるということです。 .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
node.js が両方のリクエストをすぐに実行することを期待します。それ以外の場合、これはノンブロッキングではありません。私はすでに Firefox 19 でこれをテストしたので、ブラウザはこれに関して同じように動作するようです。
それで、何が起こっているのですか?私は何かが欠けていますか?? :OOOO
アップデート
テストを Safari(6.0.2) で実行しただけで正常に動作するため、これは Chrome や Firefox などのブラウザーの問題である可能性があります。
Node.js バージョンv0.6.17およびv0.8.21でテスト済み