1

ノード 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

4

0 に答える 0