【问题标题】:Is there any kind of limit with node for I/O?I/O 节点是否有任何限制?
【发布时间】:2014-07-26 01:09:08
【问题描述】:

我正在编写一个从某个地方下载一个文件的代码,并且我正在实时流式传输到客户端。我的服务器中的文件永远不会满。只有块。代码如下:

downloader.getLink(link, cookies[acc], function(err, location) {
    if (!err) {
        downloader.downloadLink(location, cookies[acc], function(err, response) {
            if (!err) {
                res.writeHead(200, response.headers);
                response.pipe(res);
            } else
                res.end(JSON.stringfy(err));
        });
    } else {
        res.end(JSON.stringfy(err));
    }
});

正如我所见,没有任何东西阻止此代码,因为响应来自一个简单的 http.response... 问题是,这样我只能同时流式传输 6 个文件。但是服务器并没有使用所有资源(cpu 10%,内存 10%),它是一个单核。在 +/- 5 个文件之后,我只得到加载页面并且流没有开始,只有在其中一些文件完成之后。

这不是对我下载文件的第一台服务器的限制,因为例如使用我的浏览器,我可以下载任意数量的文件。我是在做错事还是这是我可以更改的节点限制?谢谢

【问题讨论】:

    标签: node.js io v8 nonblocking


    【解决方案1】:

    如果您的代码使用 node.js 核心 http 模块的 http.Agent,则它的初始限制为 5 simultaneous outgoing connections to the same remote server。尝试阅读子堆栈的rant in the hyperquest README 了解详细信息。但简而言之,尝试为您的连接使用不同的模块(我推荐使用 superagent 或 hyperquest),或者为节点核心 http 模块调整 http 代理的 maxSockets 设置。

    【讨论】:

    • 你好,我改了还是一样。我做了什么: var agent = require('http').globalAgent;代理.maxSockets = 500;然后传递给 http.request 选项代理:代理。我做错了什么吗?谢谢,我不知道,我也会尝试 superagent 和 hyperquest。
    • 哇,感谢您向我介绍了超任务。看起来是要走的路.. :)
    • 好吧,我已经用 hyperquest 重新实现了我的代码,同样的问题仍然存在。我不能同时传递 6 个流...在 6 个之后所有传入请求都挂起:/
    • 你确定不是远程服务器限制了你?尝试其他网站或 curl。
    • 原来是远程服务器限制了我。我学到了很多寻找这个。非常感谢彼得!
    猜你喜欢
    • 2011-05-14
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2018-12-08
    • 2016-04-24
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多