【问题标题】:Repeated http post request gets delayed重复的 http post 请求被延迟
【发布时间】:2015-01-07 05:26:49
【问题描述】:

我正在尝试通过发布请求将 .zip 文件 (~180KB) 作为八位字节流上传。 以下代码按预期执行 2-3 次。文件被上传,我得到了预期的响应。

但是,在第 3 次/第 4 次发布数据时,请求不会在上传服务器上显示一分钟左右。当我等待一段时间后,我可以正常执行另外 2-3 个请求,然后再次延迟。

两台服务器都在 localhost (OS X) 上运行 node (v0.10.31) + express。

var options = {
    host : interface.host,
    port : interface.port,
    path : interface.path + '/deployResources',
    method : 'POST',
    headers : {
        'Content-Type': 'application/octet-stream',
        'Content-Length': byteLength,
        'Content-disposition': 'attachment; filename=resources.zip'
    }
};
var stream = fs.createReadStream(zipPath);
var req = http.request(options, function (res) {    
    // Response delayed on 3rd/4th run
    console.log(res.statusCode);    
});

stream.on('data', function (data) {
    req.write(data);
});

stream.on('end', function () {
    console.log('STREAM END');
    stream.close();
    req.end();
});

来自节点 v0.10.32 更新日志:

http:不要在 TE HEAD 响应中发送 0\r\n\r\n (Fedor Indutny)

这可能是个问题吗?

谢谢。

【问题讨论】:

  • 在您的 options 对象中设置 agent: false 会影响任何事情吗?
  • 在不相关的说明中,您可以通过删除 stream 事件处理程序并只执行 stream.pipe(req); 来简化您的请求代码
  • 将代理设置为 false 解决了我的问题。请问你能写一个答案吗?谢谢。

标签: node.js http post file-upload stream


【解决方案1】:

有时使用Http.Agent 可能会导致此类问题。当您遇到这种行为时,您可以在请求选项中设置agent: false,以便请求始终获得全新的网络连接。

如果您在短时间内发出许多请求,这样做可能并不总是可取的,因为它可能会导致您用完可用的文件描述符(这是 Http.Agent 旨在帮助防止的)。在这种情况下,您可以尝试仅增加agent.maxSockets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多