我不完全明白Node.js是关于什么的。也许是因为我主要是一个基于web的商业应用程序开发人员。它是什么?它有什么用?
目前我的理解是:
编程模型是事件驱动的,特别是它处理I/O的方式。 它使用JavaScript,解析器是V8。 它可以很容易地用于创建并发服务器应用程序。
我的理解正确吗?如果是,那么事件I/O的好处是什么,它只是更多的并发性的东西吗?另外,Node.js的方向是成为一个框架,像基于JavaScript(基于V8)的编程模型吗?
我不完全明白Node.js是关于什么的。也许是因为我主要是一个基于web的商业应用程序开发人员。它是什么?它有什么用?
目前我的理解是:
编程模型是事件驱动的,特别是它处理I/O的方式。 它使用JavaScript,解析器是V8。 它可以很容易地用于创建并发服务器应用程序。
我的理解正确吗?如果是,那么事件I/O的好处是什么,它只是更多的并发性的东西吗?另外,Node.js的方向是成为一个框架,像基于JavaScript(基于V8)的编程模型吗?
当前回答
Q:编程模型是事件驱动的,特别是它处理I/O的方式。
正确的。它使用回调,因此任何访问文件系统的请求都会导致一个请求被发送到文件系统,然后Node.js将开始处理它的下一个请求。它只在从文件系统获得响应后才会关心I/O请求,这时它将运行回调代码。但是,可以进行同步I/O请求(即阻塞请求)。由开发人员在异步(回调)或同步(等待)之间进行选择。
Q:它使用JavaScript,解析器是V8的。
Yes
Q:它可以很容易地用于创建并发服务器应用程序。
是的,尽管您需要手工编写相当多的JavaScript。最好查看一个框架,比如http://www.easynodejs.com/,它提供了完整的在线文档和示例应用程序。
其他回答
有一个非常好的快餐店类比,最好地解释了Node.js的事件驱动模型,请参阅完整文章,Node.js,医生的办公室和快餐店-理解事件驱动编程
以下是摘要:
如果快餐店遵循传统的基于线程的模式,你会点你的食物,排队直到你收到它。在你点完餐之前,你后面的人不能点餐。在事件驱动模型中,你点了食物,然后离开队伍等待。其他人就可以自由点餐了。
Node.js是事件驱动的,但大多数web服务器是基于线程的。York解释了Node.js的工作原理:
You use your web browser to make a request for "/about.html" on a Node.js web server. The Node.js server accepts your request and calls a function to retrieve that file from disk. While the Node.js server is waiting for the file to be retrieved, it services the next web request. When the file is retrieved, there is a callback function that is inserted in the Node.js servers queue. The Node.js server executes that function which in this case would render the "/about.html" page and send it back to your web browser."
Node.js是一个为服务器端JavaScript代码构建的开源命令行工具。你可以下载一个tarball,编译并安装源代码。它允许你运行JavaScript程序。
JavaScript由谷歌开发的V8引擎执行,用于Chrome浏览器。它使用JavaScript API访问网络和文件系统。
它的性能和执行并行操作的能力很受欢迎。
理解node.js是我迄今为止找到的对node.js的最好解释。
下面是一些关于这个主题的好文章。
使用Node.js学习服务器端JavaScript 这一次,你将学习Node.js
Q:编程模型是事件驱动的,特别是它处理I/O的方式。
正确的。它使用回调,因此任何访问文件系统的请求都会导致一个请求被发送到文件系统,然后Node.js将开始处理它的下一个请求。它只在从文件系统获得响应后才会关心I/O请求,这时它将运行回调代码。但是,可以进行同步I/O请求(即阻塞请求)。由开发人员在异步(回调)或同步(等待)之间进行选择。
Q:它使用JavaScript,解析器是V8的。
Yes
Q:它可以很容易地用于创建并发服务器应用程序。
是的,尽管您需要手工编写相当多的JavaScript。最好查看一个框架,比如http://www.easynodejs.com/,它提供了完整的在线文档和示例应用程序。
闭包是在创建代码的上下文中执行代码的一种方式。
对于并发来说,这意味着您可以定义变量,然后初始化一个非阻塞I/O函数,并为它的回调发送一个匿名函数。
当任务完成时,回调函数将在变量的上下文中执行,这就是闭包。
闭包非常适合使用非阻塞I/O编写应用程序的原因是,它非常容易管理异步执行的函数的上下文。
我认为优点是:
Web development in a dynamic language (JavaScript) on a VM that is incredibly fast (V8). It is much faster than Ruby, Python, or Perl. Ability to handle thousands of concurrent connections with minimal overhead on a single process. JavaScript is perfect for event loops with first class function objects and closures. People already know how to use it this way having used it in the browser to respond to user initiated events. A lot of people already know JavaScript, even people who do not claim to be programmers. It is arguably the most popular programming language. Using JavaScript on a web server as well as the browser reduces the impedance mismatch between the two programming environments which can communicate data structures via JSON that work the same on both sides of the equation. Duplicate form validation code can be shared between server and client, etc.