ノード js の "while" ループとは別の問題であるこの投稿javascript (nodejs) while ループ バグ に加えて、次のコードが「ブロック」されない理由を理解できないようです。リクエストをブロックできるように、イベントループをブロックしようとしています(これは、テスト/喜びのためであり、nodejsに慣れるためです)。
http = require('http')
data = ""
processData = (chunk) ->
date = new Date()
dm = date.getMilliseconds()
curDate = null
loop
curDate = (new Date()).getMilliseconds()
break if curDate-dm > 4000
data += chunk
endData = ->
console.log(data)
data = ""
requestListener = (req,res) ->
req.on "data", processData
req.on "end", endData
res.writeHead 200
res.write "hello buddy"
res.end()
webserver = http.createServer requestListener
webserver.listen(6666)
4 秒間何らかのブロックが発生し、コンソールにリクエストからのデータが表示されることを期待しています。
curl -d "testdata=32" "http://localhost:6666"
ただし、ノードはコンソールに何も書き込むことも、クライアントに応答を返すこともせず、単に「フリーズ」します。時間を 100 ミリ秒に増やすと、最初の 5 ~ 8 回の試行 (データをカールに送り返す) で機能しますが、最終的にフリーズします。ここで何か不足していますか?これはバグですか?ノードはこれを適切に処理すべきではありませんか?
次のような機能をブロックする他の方法に遭遇しました。
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + 4000);
私の環境: Windows 7/cywin 2.774/nodejs 0.8.10/ curl 7.27.0