使用express.js

时间:2017-04-16 17:17:04

标签: javascript node.js express

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

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. 如何在不同的端口上设置响应?
  3. 感谢清除此事

1 个答案:

答案 0 :(得分: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调试器中的网络标签,用于查看缓存的文件是否已缓存,反之亦然。
  6. 通常,您希望避免将80或442以外的端口用于网络流量,因为许多网络基础结构(特别是严格控制的公司环境)可能不允许用户使用其他端口进行网络流量。