Node.js与其他服务器端框架有何不同?


21

我注意到Node.js变得非常流行,并且我看到有人在其中进行小型项目的一些实例。

我还查看了利弊列表,以了解Node.js可以做什么,但是我仍然不清楚它与其他更成熟的服务器端技术(如PHP,Perl或Ruby)的区别滑轨。

具体来说,是什么将Node.js与当前替代方案区分开来,为什么?


1
@downvoter-为什么要下投票?除了第二个paragragh(您不能真正问为什么在别人做某件事后开始做某事,因为您总是可以做得更好),所以我发现这个问题很有趣。我自己经常想到这个。
大卫·彼得曼

这是次要的选择,但是如果您用带引号的词组 “ node.js”进行 Google搜索,您将获得约300万次点击。
彼得·罗威尔

@Peter,是的,我尝试过了,您是对的。但是300万仍然是两个。您可以在一年后回来,这个数字可能会增加到1000万。:)
Saeed Neamati 2011年

3
@Mark,感谢出色的编辑。现在更清楚了。
Saeed Neamati 2011年

Answers:


18

有两个重要的因素使Node.js与现有的服务器端框架有所不同:异步事件以及将JavaScript用作编程语言。

异步事件

尽管大多数现有服务器端框架都使用同步架构,但Node.js使用异步架构,JavaScript可以很好地处理该架构。这意味着服务器对事件做出反应,并将事件(消息)发送到例如数据库。这种编程风格与同步风格非常不同,并且可能难以与其他语言一起使用。Node.js采用具有异步IO的异步样式,并且可以很好地扩展。

另请参阅事件驱动架构

的JavaScript

JavaScript是Web应用程序在客户端上使用的编程语言。在服务器端使用相同的语言意味着开发人员可以将其JavaScript知识应用于客户端和服务器,并根据需要使用相同的功能。

我会推荐Ryan Dahl的演示文稿Node.js简介,他将更详细地解释Node.js事件驱动的体系结构。


2
到目前为止,这无疑是最好的答案,但是我将异步事件放在首位,因为这正是使Node.js成为服务器端框架如此吸引人的原因。不错,但是提到异步I / O和可伸缩性。这就是它的核心。
亚当·克罗斯兰

好吧,@乔纳斯,我还是不明白。ASP.NET也是基于事件的。那么Node.js和ASP.NET有什么区别?仅仅是因为它是异步的吗?在那种情况下,我认为在ASP.NET中使用多线程可以做到这一点,不是吗?
Saeed Neamati 2011年

3
@Saeed:ASP.NET是线程化和同步的,例如,在访问数据库时,线程被阻塞并正在等待数据库的答复。当使用多个线程(例如,每个请求一个)时,会使用大量内存(每个线程需要大量内存),这可能是瓶颈。Node.js发送消息并对事件做出反应,因此它从未(希望如此)阻塞线程。使用node.js,您将使用与客户端使用的Ajax相同的编程模型(异步 javascript和XML)以及相同的语言。
乔纳斯(Jonas)

您忘记了背后的强大开源社区。
雷诺斯2011年

3
当C#5随新async东西一起滚动时,尽管这可能会改变。问题不在于您不能用其他语言编写可伸缩的异步代码,而是如果没有良好的语言水平支持,(正确)进行操作会更加困难。
戴维8年

6

它之所以不同,是因为它是事件驱动的。这使得服务器具有高度的可扩展性。

简而言之;

螺纹型号

  1. 客户要东西
  2. 服务器关闭并处理请求
  3. 退还给客户
  4. 准备处理新请求

事件模型

  1. 客户要东西
  2. 服务器将请求传递进行处理。准备处理新请求
  3. 服务器处理传入的更多请求
  4. 请求完成处理后,服务器将数据返回给客户端

@Tom,事件驱动是什么意思?ASP.NET WebForms也是事件驱动的,您可以看到诸如Session_Startedor Context_AuthenticatedPage_Load?之类的处理程序。
Saeed Neamati 2011年

1
称它为事件驱动比需要的含义更加含糊,并且它并没有真正进入Node.JS的核心:异步I / O。
亚当·克罗斯兰

2

我一直觉得它的流行是由于使用JavaScript。由于许多Web开发人员都知道JavaScript,这是他们现在可以使用相同语言开发服务器端代码的卖点。我可以想到的一些优点:

  • 可以在服务器和客户端之间共享代码文件,从而避免重复处理仅处理系统两侧的工作。
  • 开发人员无需在语言之间进行思维切换。(我认为这没什么大不了的)
  • 架构Web解决方案时,架构师不需要选择多种语言。
  • 从未开发服务器端代码的人现在可以这样做,而无需学习其他语言。(恕我直言,这不太可能是有价值的论据)

Node.JS之所以受欢迎,是因为它速度快且可扩展性好。它在JavaScript中是很好的,但很大程度上是偶然的。
亚当·克罗斯兰

2
更有价值的是服务器端开发人员可以用相同的语言编写客户端代码,并且可以与客户端共享服务器端模块。并非相反。我不想将被黑客入侵的客户端代码移植到服务器上,那真是令人费解。
雷诺斯2011年

@Adam:当已经有符合“快速且可伸缩性”描述的技术时,node.js为什么会变得流行?-因为是JavaScript。
约翰·费舍尔

@John编写在Node.js中无法很好扩展的应用程序更加困难。如果您的应用程序是磁盘/网络密集型而不是CPU密集型(多数是),那么您可以轻松地在单个核心上支持比大多数其他服务器多得多的同时连接,除非您编写了一些非常棘手的线程代码。
戴维8年

@ Davy8:我猜这一切都取决于您使用的其他框架/系统。您所描述的可扩展性的简便性已经使用我使用的工具很简单了。从我的角度来看,Node.js唯一提供的是JavaScript风格,这并不引人注目。
约翰·费舍尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.