我知道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吗?
有人可以给我一个清楚的解释吗?对不起,如果问题不明确或者其他什么,我只是一个初学者。将欣赏任何意见/建议。感谢
答案 0 :(得分:9)
简单来说,node.js服务器是Apache Web服务器之类的替换 - 但它大部分用JavaScript运行,在服务器上运行(由V8引擎执行)而不是在客户端。它可以通过包含在JavaScript接口中的“本机代码”模块(用C ++编写)来扩展以添加功能,但AFAIK大多数node.js模块都是纯JavaScript。
“事件驱动的I / O”只是一个术语,它描述了您在JavaScript中习惯的常规异步回调机制。在node.js中,您为各种事物提供回调,并在相关事件发生时调用您的函数。
根据您添加的模块数量,与Apache类似,node.js服务器相对轻量级,并且在某些方面更简单。
我看到node.js的两个主要优点是:
这是我刚刚遇到的一篇文章,可能也会有所启发: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是:
值得注意的是,Node也不一定非必须用于Web开发。它的目的是“对待IO”。