1

除了这篇文章javascript (nodejs) while loop bug 这是与 node js 中的“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 次尝试(将数据发送回 curl),但最终会冻结。我在这里错过了什么吗?这是一个错误吗?节点不应该优雅地处理这个吗?

我遇到了其他有效的阻塞方法,例如:

    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