最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

NodeJs简明教程(1)

XAMPP教程 中文小张 984浏览 0评论

NodeJs究竟是什么

来看一段官方的说法[1]:

As an asynchronous event driven JavaScript runtime, Node is designed to build scalable network applications. In the following “hello world” example, many connections can be handled concurrently. Upon each connection the callback is fired, but if there is no work to be done, Node will sleep.

Google翻译版本:

作为异步事件驱动的JavaScript运行时,Node旨在构建可伸缩的网络应用程序。在下面的“hello world”示例中,可以同时处理许多连接。在每次连接时都会触发回调,但是如果没有工作要做,Node将会休眠。

结合上面的介绍,我们可以得出一个结论:

NodeJs的本质是一个Javascript运行时。该运行时基于异步事件驱动进行运作。

异步

本文中的异步指异步IO。维基百科对异步IO的定义[2]:

异步IO是计算机操作系统对输入输出的一种处理方式:发起IO请求的线程不等IO操作完成,就继续执行随后的代码,IO结果用其他方式通知发起IO请求的程序。与异步IO相对的是更为常见的“同步(阻塞)IO”:发起IO请求的线程不从正在调用的IO操作函数返回(即被阻塞),直至IO操作完成。

一言以蔽之就是:

执行IO请求后,调用方不等执行结果就继续执行下面的代码,IO操作完成后执行者会告诉调用者“我执行完了”。在NodeJs中通知方式是“回调”。

事件驱动

事件驱动是相对 线程驱动 而言的。线程驱动 下服务器为每个请求新建一个线程去处理。
维基百科对事件驱动的定义[3]:

事件驱动程序模型下的系统,基本上的架构是预先设计一个事件循环所形成的程序,这个事件循环程序不断地检查当前要处理的信息,根据要处理的信息运行一个触发函数进行必要的处理。其中这个外部信息可能来自一个目录夹中的文件,可能来自键盘或鼠标的动作,或者是一个时间事件。

以NodeJs的HTTP服务器为例,当调用server.listen函数时,NodeJs就会创建一个事件循环,当有客户端请求过来时,NodeJs将该请求入队列进行后续处理,主线程以及轮询客户端请求并入队列,队列中的请求执行完毕后会通过回调函数的形式通知主线程,如此循环。

Javascript运行时

Javascript运行时是个比较复杂的概念,本文在介绍 Javascript运行时 之前介绍一下 Javascript引擎。

Javascript引擎

维基百科的定义[4]:

JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中。

个人理解:

Javascript引擎主要是对Javascript代码进行词法、语法等分析,通过编译器将代码编译成可执行的机器码让计算机去执行。

目前业内出名的Javascript引擎非V8莫属了。

运行时的组成

Javascript可以运行在浏览器,也可以运行在服务器(NodeJs)中,有些API或者对象只有浏览器有(比如DOM,BOM等),而有些API或者对象只有服务器中有(如文件操作,HTTP服务器等)。

Javascript运行时包括了Javascript引擎、特定环境API、事件循环和事件队列。

NodeJs架构图

NodeJs由C++语言基于libuv开发,分层设计,Javascript只是其基于V8提供的上层接口,换句话说,如果把上层接口换成其他语言实现,比如换成PHP实现,那么PHP就可以实现异步事件驱动的服务器,运行时名称就成为 NODE-PHP。

转载请注明:XAMPP中文组官网 » NodeJs简明教程(1)

您必须 登录 才能发表评论!