gpt4 book ai didi

javascript - 使用express.js 发送文件的有效方法

转载 作者:行者123 更新时间:2023-12-01 03:48:03 25 4
gpt4 key购买 nike

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

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. 如何在不同端口上设置响应?

感谢您解决这个问题

最佳答案

将下载放在不同的端口上不会对服务器效率或扩展本身产生影响。

有帮助的是将静态文件的下载从 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 流量。

关于javascript - 使用express.js 发送文件的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com