完成请求的req.pause()暂停下一个请求

时间:2011-03-24 01:46:19

标签: node.js

我有一个非常简单的文件上传示例

var http = require('http');
http.createServer(function(req, res){
  console.log(req.method);
  if (req.method == 'GET'){
    res.writeHead(200);
    res.write('<html><head></head><body><form method="POST" enctype="multipart/form-data"><input type="file" id="f" name="f"><input type="submit"></body></html>')
    res.end();
  }else if(req.method == 'POST'){
    req.pause();
    res.writeHead(200);
    res.end();
  }else{
    res.writeHead(404).end();
  }
}).listen('8081');

我想要做的是暂停上传。虽然它适用于大文件,但可能在单个部分中与请求一起发送的小文件(&lt; = 100kB)不会暂停(这很好并且可以理解),而是下一个暂停对服务器的请求(即当我尝试加载页面时,它永远不会到达console.log(req.method)部分,但是当我再次刷新它恢复正常时),这绝对不是很好。

这似乎是偶尔出现的错误,所以当我没有发现任何关于它的抱怨时,我感到很惊讶。您有什么想法/可能的解释/解决方法/修复建议?现在我检查文件的大小是否低于某个阈值,但它看起来不太安全或不太优雅。

1 个答案:

答案 0 :(得分:1)

我认为(可能是错误的)req.pause导致底层套接字暂停。验证此声明的一种方法是在 res.writeHead(200); 中添加标题 Connection:Close ,它位于 req.pause行之后();

现在,如果每个开始工作正常(下一个请求没有暂停),您可以说底层套接字已暂停,并且正在重复用于下一个请求。