node.js在web开发上下文中的位置?

时间:2011-07-09 03:56:41

标签: javascript c++ node.js event-driven

我知道node.js据说是 V8 Javascript引擎上托管的“事件驱动的I / O”服务器端javascript。我访问了node.js网站,然后阅读了wikipedia条目,但是不能完全了解在哪里使用它以及它将如何有用。 “事件驱动的I-O”? “V8 Javascript引擎”?在某些情况下,我看到使用“服务器端”javascript有点矫枉过正..我在wikipedia entry of node.js中采用了这段代码:

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);

console.log('Server running at http://127.0.0.1:8000/');

我一直在想,运行服务器真的有一个重要的目的,特别是服务于应用程序前端部分执行的javascript文件吗?

我还在github中分叉了node.js repo以了解它的工作原理,结果发现它的一些模块是用C ++编写的。那么它毕竟不是一个javascript吗?

有人可以给我一个清楚的解释吗?对不起,如果问题不明确或者其他什么,我只是一个初学者。将欣赏任何意见/建议。感谢

3 个答案:

答案 0 :(得分:9)

简单来说,node.js服务器是Apache Web服务器之类的替换 - 但它大部分用JavaScript运行,在服务器上运行(由V8引擎执行)而不是在客户端。它可以通过包含在JavaScript接口中的“本机代码”模块(用C ++编写)来扩展以添加功能,但AFAIK大多数node.js模块都是纯JavaScript。

“事件驱动的I / O”只是一个术语,它描述了您在JavaScript中习惯的常规异步回调机制。在node.js中,您为各种事物提供回调,并在相关事件发生时调用您的函数。

根据您添加的模块数量,与Apache类似,node.js服务器相对轻量级,并且在某些方面更简单。

我看到node.js的两个主要优点是:

  1. 它允许您使用相同的语言编写Web应用程序的服务器端和客户端部分。在某些情况下,您可以在两侧使用相同的代码。
  2. 它让所有那些了解JavaScript的Web开发人员可以访问服务器端编码,而无需学习更常见的服务器端语言,如PHP或Java。
  3. 这是我刚刚遇到的一篇文章,可能也会有所启发:What is Node.js?

答案 1 :(得分:3)

虽然我不能对@sje所说的内容添加太多内容,但我会重复他分享的博客链接,因为这是我发现的最快解释nodejs的资源:

http://radar.oreilly.com/2011/07/what-is-node.html

另请注意,它来自OReilly,我们大多数人都知道他们是市场上程序员最佳参考的出版商;)

  

我一直在想,运行服务器真的有一个重要的目的,特别是服务于应用程序前端部分执行的javascript文件吗?

这是完全错误的。这是关于你可以做出的节点最错误的假设。节点运行服务器上的javascript ,就像运行ruby或php或asp.net代码一样。浏览器也可以运行javascript这一事实与节点无关。

当然,您可以在服务器和客户端之间共享模块(例如,表单数据的验证例程),但总的来说代码库是不同的,因为它们适用于不同的事物。

  

我还在github中分叉了node.js repo以了解它的工作原理,结果发现它的一些模块是用C ++编写的。那么它毕竟不是一个javascript吗?

是的,node是一个使用V8引擎解释javascript的服务器。它必须在中写入。我将给你一个比较:Microsoft .NET代码主要是在.NET上用.NET编写的,但实际完成工作的主要代码,即管理托管的运行时(大多数人称之为CLR) -code,该代码用C语言编写。与节点相同。是的,其中大部分(如您所见)是用javascript编写的,但运行其他所有内容的核心库都是用C语言编写的。

  

有人可以给我一个清楚的解释吗?对不起,如果问题不明确或者其他什么,我只是一个初学者。将欣赏任何意见/建议。感谢

我希望这有助于部分澄清它。有很多内容可以覆盖,并且没有进入evented-io(涉及理解进程和线程以及io访问和许多其他东西),这几乎是这个问题的基本高级答案。如果您愿意,我邀请您到聊天服务器上的nodejs会议室,进行更多随机讨论。 http://chat.stackoverflow.com/rooms/642/node-js

关于您提出的第一个问题:

  

它适合哪里?

同样的地方ruby和php以及perl和python以及asp.net这样做。在服务器上,生成客户端收到的代码。

答案 2 :(得分:1)

我还没有看到有人给出一个简单的答案。

Node.js是:

  • v8 javascript引擎
  • 事件循环
  • 一些c ++绑定,其中包括提供v8 IO功能(网络和文件IO)

值得注意的是,Node也不一定非必须用于Web开发。它的目的是“对待IO”。