【问题标题】:efficient way to send files using express.js使用 express.js 发送文件的有效方法
【发布时间】:2017-04-17 01:52:49
【问题描述】:

这是一个我什至不知道如何在网络上搜索它的问题,可能这是一个愚蠢的问题:

Web 服务器在 21(ftp) 等不同端口上设置下载请求和文件流是否比使用默认的 80/443(http/https) 端口更有效?甚至使用另一台服务器来处理这些请求,这样就不会再有通过 http/https 连接的大量流量。甚至可以做这样的动作吗?

如果是,如何在 Express.js 上设置这些设置?如果没有,处理大量下载的常规方法是什么?

我知道可以使用这样的响应对象通过用户的浏览器发送文件:

app.get('/download', function(req, res){
    res.download('image.jpg');
}

据我所知,它使用 http/https。我想知道是否可以在端口 21 上手动设置。

所以有两个问题:

  1. 在不同端口上处理下载是否有效?
  2. 如何在不同的端口上设置响应?

谢谢你解决这个问题

【问题讨论】:

  • 您正在寻找CDN
  • @Emissary 谢谢,这很有帮助,我想这超出了我的编程知识,可能需要系统管理员,因此无法优化 node.js 来完成这项工作。但也许仍然可以在另一个端口上设置一些请求,它也可以提高效率吧?
  • 查看 nginx
  • @JordanS 我知道 Nginx 和 Apache 有一些模块可以处理不同端口上的这些请求,但我想知道 Node.js 是否也支持这些功能。顺便说一句

标签: javascript node.js express


【解决方案1】:

将下载放在不同的端口上不会影响服务器效率或自行扩展。

有助于将静态文件的下载从 node.js 进程中移到另一个进程中,或者在大规模情况下,移到另一个主机上。在所有情况下,在您证明您确实存在规模问题并需要增加额外的复杂性之前,我不会增加额外流程的复杂性。规模瓶颈通常不在您认为的位置,因此在不首先衡量瓶颈实际位置的情况下为项目增加复杂性以提高规模通常是浪费精力。

切换到不同的端口本身并不能增加可扩展性。具有规模限制的不是端口。它是进程和主机。因此,您可以添加另一个 HTTP 进程(并继续使用 HTTP)以成功添加进程并扩大规模。

一旦您证明您确实存在静态下载的扩展瓶颈,您可以通过以下方式使用静态下载来增加下载规模:

  1. 集群您的应用,这样您就拥有多个 node.js 进程,所有这些进程都有助于您的应用规模。
  2. 使用专门构建的代理,例如 NGINX,并对其进行配置,以便在静态下载进入您的 node.js 进程之前对其进行处理。在该配置中,NGINX 代理拦截静态下载请求并在其进程中处理它们,同时将其他请求传递到您的 node.js 服务器。
  3. 使用 CDN(为静态下载专门构建的服务)。对于 jQuery 等常用库,您已经可以使用公开可用的 CDN。使用这些也会增加您的客户端已经缓存相关文件的可能性(因为他们使用的其他一些网站在同一个 CDN 上使用同一个文件)。
  4. 为静态下载部署您自己的附加主机。例如,您会看到一些大型网站使用xxdomain.com 作为主要主机,img.xxdomain.com 作为单独的图像下载主机。
  5. 确保您的静态文件/服务器具有适当的配置/设置,以便客户端浏览器适当地缓存它们。您可以通过在客户端浏览器中重新加载页面并检查网络选项卡来相当简单地测试这一点Chrome 调试器以查看应该缓存的文件是否在缓存位置,反之亦然。

一般而言,您希望避免将 80 或 442 以外的端口用于 Web 流量,因为许多网络基础设施(特别是受严格控制的公司环境)可能不允许用户使用其他端口来进行 Web 流量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2013-07-01
    • 2016-08-29
    • 2016-09-04
    • 1970-01-01
    • 2019-08-30
    • 2021-03-01
    相关资源
    最近更新 更多