7

我知道 node.js 据说是托管在V8 Javascript 引擎上的“事件驱动 I/O”服务器端 javascript 。我访问了 node.js 网站,然后阅读了 wikipedia 条目,但无法完全了解在哪里使用它以及它将如何有用。“事件驱动的 IO”?“V8 Javascript 引擎”?不过,在某些情况下,我认为使用“服务器端”javascript 有点矫枉过正。我以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 存储库,以了解更多关于它是如何工作的,结果发现它的一些模块是用 C++ 编写的。那么它毕竟不是javascript吗?

有人可以给我一个关于这一切的明确解释吗?对不起,如果问题不清楚或什么,我只是一个初学者。将不胜感激任何输入/建议。谢谢

4

3 回答 3

9

简单来说,node.js 服务器是Apache Web 服务器之类的替代品——但它主要是用 JavaScript 编写的,运行在服务器上(由 V8 引擎执行)而不是客户端。它可以使用封装在 JavaScript 接口中的“本机代码”模块(用例如 C++ 编写)进行扩展以添加功能,但据我所知,大多数 node.js 模块都是纯 JavaScript。

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

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

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

  1. 它允许您使用相同的语言编写 Web 应用程序的服务器端和客户端部分。在某些情况下,您可以在两侧使用相同的代码。
  2. 它使所有了解 JavaScript 的 Web 开发人员都可以访问服务器端编码,而无需学习更常见的服务器端语言,如 PHP 或 Java。

这是我刚刚看到的一篇文章,也可能会有所启发:什么是 Node.js?

于 2011-07-09T04:19:45.733 回答
3

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

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

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

我一直在想,运行一个专门为在应用程序的前端部分执行的 javascript 文件提供服务的服务器真的有一个重要的目的吗?

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

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

我还在 github 上分叉了 node.js 存储库,以了解更多关于它是如何工作的,结果发现它的一些模块是用 C++ 编写的。那么它毕竟不是javascript吗?

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

有人可以给我一个关于这一切的明确解释吗?对不起,如果问题不清楚或什么,我只是一个初学者。将不胜感激任何输入/建议。谢谢

我希望这有助于部分清除它。有很多要介绍的内容,并且不涉及 evented-io(涉及理解进程和线程以及 io 访问和许多其他内容),这几乎是这个问题的基本高级答案。如果你愿意,我邀请你到这里的聊天服务器上的 nodejs 房间,进行更多流畅的随机讨论。https://chat.stackoverflow.com/rooms/642/node-js

至于你问的第一个问题:

它适合在哪里?

ruby 和 php 和 perl 和 python 和 asp.net 做的地方是一样的。在服务器上,生成客户端接收的代码。

于 2011-07-09T05:28:29.180 回答
1

我还没有看到有人对此给出简单的答案。

Node.js 是:

  • v8 JavaScript 引擎
  • 一个事件循环
  • 一些 c++ 绑定,除其他外,提供 v8 IO 功能(网络和文件 IO)

需要注意的是,Node 也不一定必须用于 Web 开发。它的目的是“事件 IO”。

于 2011-07-09T09:03:23.763 回答