【问题标题】:what's advantages on using node.js+ node http server over php/ruby/etc + nginx? [closed]在 php/ruby/etc + nginx 上使用 node.js+ 节点 http 服务器有什么优势? [关闭]
【发布时间】:2011-09-14 16:48:16
【问题描述】:

我看到很多文档说 node.js http server 的主要优势是 evented io 架构,但是 Nginx 也有 evented io,那么使用 node.js + node http server OVER php 或其他语言有什么优势Nginx ?

【问题讨论】:

标签: php javascript node.js nginx


【解决方案1】:

任何答案的核心都应该是“这取决于您要做什么”。例如,您可能正在尝试...

  • 在聊天室中支持 10k 个并发客户端
  • 每月提供 100 万个静态页面
  • 为 3k 用户提供类似 CMS 的功能
  • 提供一个简单的博客类型网站,供小型企业使用
  • 支持写入繁重的系统,例如拥有数百万用户的游戏
  • 建立一个消费者银行网站
  • 等等..

人们普遍认为应该选择正确的技术来解决手头的问题 - 任何关于将一种技术与另一种技术相结合的优点的讨论,无论它们是否固有地处理事件 IO,都将是在任何决策过程中的价值有限。

另一个对您的技术堆栈决策具有高度影响力的因素是可用于实现项目目标的技能和经验。

不过……

在使用了您所指的所有技术之后,我将为您提供一些我们认为已经解决的问题以及为什么选择某些配置的示例:

PHP + Nginx

是的,PHP 是阻塞的,但这对 Facebook 和其他使用它作为其核心 Web 应用程序语言的人来说并没有任何障碍。在更传统的 LAMP 堆栈中,A 是 Apache,您有一个众所周知且长期存在的问题,该问题可能在高流量条件下出现,您可能在入站 Apache 的 Web 请求和与数据库。如果您希望为超过 1000 个并发客户端提供服务,并且您的数据库有 1000 个连接限制,我预计您会遇到困难。

这种资源匮乏为用户在过载条件下创造了一种破坏体验。

在这种情况下,Nginx 可以为您带来更多收益,因为事件 IO 将 Web 请求和出站 PHP 数据库连接之间的关联解耦。有很多文献可以证实这一点。请记住,这不是魔术——这取决于你如何配置 NGinx 和 PHP——你可以通过启用默认设置轻松上吊。

假设通过配置进行了思考,NGinx 的事件 IO 具有缓冲请求的净效果,以数据库可以处理的速率将它们发送到 PHP。

PHP 应用广泛使用 Memcached 等缓存,以进一步支持读取繁重的系统中的高容量。

Node.js(纯 HTTP)

我们选择 Node.js 作为其支持的生产解决方案的原因是

  • 它不是关键任务(Node.js 是新的,因此您不希望在其上运行您的银行系统)
  • 我们想要轻量级的东西
  • 我们想要学习和实验 - 通常许多业务系统都不允许此标准

Node 的新颖性和它所涉及的 IO 编程概念的微妙之处意味着我们多次破坏事物,并且与我们坚持使用 PHP 相比,我们花费了更长的时间来获得最终解决方案。

Web 应用程序的框架还处于起步阶段

  • Express.js
  • 套接字流
  • Backbone.js
  • 也许是其他人……

考虑到他们都很年轻,他们的工作仍在进行中。根据您要为项目实现的目标,它们可能会很好地为您服务,或者在您学习它们时会浪费时间和精力。

例如,在 Express.js 中,处理 HTTP 缓存标头、内容的 GZIPing 等简单的事情并不完全是标准的,所以如果这类事情是必不可少的,你将不得不开始制定定制的解决方案或寻找其他地方。

与 NGinx 或 Apache 不同,Node.js 安装或使用它构建的应用程序没有任何本机可以确保它在运行级别启动。这意味着您必须找出一些解决方案来管理应用程序在重新启动时自动启动和其他恢复,使用 Node.js 之外的其他东西。 (我们使用Monit)

Node.js + NGinx

你敢打赌,为什么不呢.. NGinx 更加成熟,所以我们需要在将 SSL 连接移植到 Node.js 之前终止它们,这就是我们所做的。额外的好处是现在 NGinx 可以通过 GZIP 内容。

【讨论】:

  • 我不会说 express 还处于起步阶段。其余的都是。
  • 谢谢!这对我帮助很大!
【解决方案2】:

如果一个组件是非阻塞的是不够的。一切都必须是为了整个事情是非阻塞的。如果只有一件事阻塞,那么一切都会阻塞。

即使在 Node.JS 中,您的应用程序可能仍然会阻塞,即使 Node.JS 本身不是:如果您执行阻塞文件系统或 DB 访问(无论出于何种原因),它仍然会阻塞。


就像 PS:如果有东西被阻塞,并不意味着它是坏的。所以这不是支持或反对 Node.JS 的论据。对于某些你确实需要非阻塞应用程序的事情,你应该使用 Node.JS,但对于大多数应用程序来说,PHP 是更好的选择(由于更大的社区支持和集成。)

【讨论】:

  • “PHP 是更好的选择”,但是你必须接触 PHP :(。我会在 node 中做所有的 web 开发。
【解决方案3】:

PHP 是阻塞的,而 node.js 不是。 nginx 是否具有与 node.js 几乎相同的架构并不重要,因为 PHP 仍然处于阻塞状态。

【讨论】:

    【解决方案4】:

    取决于您的应用程序:

    关于节点js的简短视频:link

    让它变得更好的东西:

    它使用 javascript,使得服务器端和客户端之间的代码重用更好。

    Node Js 本身是非阻塞的。

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 2013-05-31
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      相关资源
      最近更新 更多