【问题标题】:Is Node.js useful for "classic" style websites?Node.js 对“经典”风格的网站有用吗?
【发布时间】:2013-08-11 18:49:58
【问题描述】:

我正在考虑使用 nodejs 来制作一个非实时应用程序。例如,博客、论坛或图片板之类的网站。

我读到 nodejs 在用于异步作业时效果很好。所以我想知道当用于提供大量静态文件时会产生什么结果,例如大图像、css 和 js 文件等。

是不是在发送文件时(假设是2-3MB),整个服务器都会被阻塞,直到传输完成?我还读到有可能使用操作系统的sendfile() 系统调用来完成这项工作。这种情况下,Express 支持吗?

【问题讨论】:

  • 是的,Express 确实支持sendfile() 功能,我已经使用Node.js 写了我的博客,这很棒! Spectrum.
  • 为了在 Web 上提供静态文件,您可能需要考虑使用专用 CDN(例如 Amazon CloudFront)。
  • 谢谢@Spectrum。您可以发布文章的链接吗?
  • nginx 和 node.js 的组合非常容易设置,并且可以保护 node 免受会攻击任何 Web 服务器的垃圾请求的冲击。 Nginx 可以设置为仅将某些 url 路径转发到节点,并从文件目录中提供其余的路径。此设置对于允许节点响应 ajax 请求并在 nginx 提供 javascript 时仍满足浏览器同源策略限制非常有用。

标签: node.js


【解决方案1】:

不,这不是真的。您可以轻松发送大文件(远大于 2-3 MB)而不会阻塞。抱怨这样阻塞 Node 事件循环的人只是不知道他们在做什么。

您不一定需要使用 Express 来获得这种行为。

话虽如此,如果您想要的是文件服务器,那么没有理由使用 NodeJS。只需将 Apache 指向一个目录,然后让它飞起来。为什么要重新发明轮子只是为了使用新的性感技术,而老忠实者做得很好?

如果你想用 node 作为一个简单的 http 服务器,我可以推荐非常简单的命令行模块。

https://npmjs.org/package/http-server

我没有查看模块的代码,但它可能没有针对大文件进行优化。在这种情况下,让我们将 large 定义为不易缓存在内存中的文件(无论这对您的设置意味着什么)。如果您的用例需要更多优化(例如管道“大”文件),您可能仍然需要编写自己的模块,但这将使您快速入门,并且是在需要时用于一般开发的出色实用程序快速提供目录。

【讨论】:

  • 也是很好的例子,老实说,我想到的第一个例子。
  • 谢谢@ChrisCM。这真是太好了。我正在考虑使用 node 特别是它的模块 socket.io 当(希望)我的网站变得更大时它可能会变得有用,所以我不必增加系统的复杂性。
猜你喜欢
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2016-02-23
  • 2011-01-19
  • 1970-01-01
  • 2018-02-17
  • 2021-08-23
  • 1970-01-01
相关资源
最近更新 更多