除了这篇文章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