node起步(安装,建立服务,事件式编程)-01

来源:互联网 发布:电子数据使用保密协议 编辑:程序博客网 时间:2024/05/28 19:23

鄙人在公司这几天也是闲的够够的,所以有时间学习下最近很火的node的,看这篇文章要有一定的js基础噢噢,。。。我也不像手册一样写的规规矩矩,写作者写node简介在我这里都省去了,就不再追诉node的历史了,如果你喜欢看node的历史可以百度或者去看下手册也行。说道这里我们就正式切入正题了,

描述:node不像jquery ,underscore,zepotor,似的是前端类库也不是angular和backbone似的前端框架更不是前端项目管理的工具。例如百度的fis,gulp, webpack,也不是新的语言。说道这里有人估计要问我了。他不是服务端的脚本语言吗?呵呵听我慢慢道来。。。

我们平常写的javascript平常都是有ECMAscript,dom,bom这三个组合起来的,ECMAScriptISO-16262是给js制定的一个标准,说白了也就是我们平常写的js。说到标准不得不提commonJs,commonjs就是js在服务端设置的一个标准,至于commonjs标准是什么你可以百度去。说了老半天也没说出node是个什么玩意。好了现在我就说下node到底是个什么玩意,他是个平台。做过java开发的童鞋都知道java是跑在服务端的服务端语言,但是在服务端跑起来是需要一个java环境的,恰巧js要脱离浏览器内部的js引擎,他要是在服务端跑也需要一个环境对它做支撑,那是什么呢?那就是node。我这样说应该明白了吧。Node是基于谷歌的v8引擎开发的一个跑在服务端的js环境。当然node做的不止是这些还有好多js库也就是所谓包

到此node我就简单的介绍完了,再次说的不全面的还望高手指点。。。。

node准备工作

官网下载地址:https://nodejs.org/en/

中文网下载地址:http://nodejs.cn/

安装node

这两个地址任选一个即可,根据你的电脑系统选择相应的node版本下载。至于安装我就不多说了傻瓜式安装,命令工具你任选一个就行window选择cmd,或者下载第三方的也可以例如shell ,gitbash,都行

随时查看的api地址

英文:https://nodejs.org/dist/latest-v6.x/docs/api/http.html

中文:http://nodeapi.ucdok.com/#/api/

打印hello world

这个hello world只从我学习编程就没有离开过他,一直是他伴随这我走向了编程世界

好了,让我们开始实现第一个 Node.js 程序吧。打开你常用的文本编辑器,在其中输入:
console.log('HelloWorld');
将文件保存为 helloworld.js,打开终端(cmd,或者shell命令工具),进入 helloworld.js所在的目录,执行以下命令:
nodehelloworld.js

噹噹。。。。是不是打印出hello world 了!!!!!那就成功了

建立http服务器

说到服务器不得不提apache,iis,etc这些东东。如果你开发过php的话就简单多了

做php会知道在成功运行 PHP 之前先要配置一个功能强大而复杂的 HTTP服务器,譬如 Apache、 IIS 或 Nginx,还需要将 PHP 配置为 HTTP 服务器的模块,或者使用FastCGI 协议调用 PHP 解释器。这种架构是“浏览器 HTTP 服务器 PHP 解释器”的组织方式,而Node.js采用了一种不同的组织方式,

 

让我们创建一个 HTTP 服务器吧。建立一个名为 app.js 的文件,内容为:

//app.jsvar http = require('http');http.createServer(function(req, res) {res.writeHead(200, {'Content-Type':'text/html'});res.write('<h1>Node.js</h1>');res.end('<p>Hello World</p>');}).listen(3000);console.log("HTTP server is listening at port 3000.");


接下来运行 node app.js命令,打开浏览器访问 http://127.0.0.1:3000,

当当。。是不是显示node.js  hello world字样啊。。。。恭喜你运行成功了

 

由于后边挂了一个listen(3000)监听端口为3000的服务所以你要停掉这个服务需要按两下ctrl+c 才可以噢噢噢写到这里我们继续往后讲。写过项目的童鞋都知道,我们开发项目,断不了修改bug,进行代码调试。而node服务一旦启动就不再读取你修改的文件了,他会读取内存,这样的话我们每次修改bug就得从新启动服务感觉好恶心啊!当然node也给了你一个简单的解决方案如下

 

用node安装 supervisor(管家) 模块

npm install –g supervisor  -g代表是把supervisor安装在全局,这样我们的电脑在哪都可以用supervisor  app.js来启动服务了

 

接下来我们就可以通过supervisor  app.js启动我们上边编写的app。Js就可以咯是不是很爽啊!!

异步式I/o与事件式编程

首先我解释下什么叫异步式I/o, 在介绍异步的同时我先说下什么叫I/o

I/o是线程在执行中如果遇到磁盘读写或者网络通信被统称为I/o

把io介绍完了再介绍异步

异步就是当线程遇到I/o操作的时候不会去等待I/o返回数据就执行下一条语句了,说白了就是将i/o请求给操作系统,有操作系统执行,当操作系统执行完了会返回数据,这个请求方式就是异步也就是非阻塞请求,但是有童鞋会问   i/o如果返回数据了谁会通知执行i/o操作的线程呢?答案是我们所要讲的事件。

 

事件:Node.js所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。在开发者看来,事件由 EventEmitter对象提供。前面提到的 http.createServer 的回调函数都是通过 EventEmitter 来实现的。下面我们用一个简单的例子说明 EventEmitter
的用法:

 Var EventEmitter=required(“events”).EventEmitter;Var event=new EventEmitter();//监听事件Event.on(‘some_event’,function(){       Console.log(‘some_eventoccurred’);});//执行事件setTimeout(function(){       event.emit(‘some_event’);},1000)


 

这段代码我本不想解释课时但是断不了小白会看到会不解。所以我解释下吧

第一行是获取EventEmitter构造函数,第二行是创建一个event对象,第三四五行是js的事件监听,当过1秒后会向event对象发送一个名字叫some_event事件名称,也就是添加到事件队列里边去

 

事件循环:Node.js 在什么时候会进入事件循环呢?答案是 Node.js程序由事件循环开始,到事件循环结束,所有的逻辑都是事件的回调函数,所以 Node.js 始终在事件循环中,程序入口就是事件循环第一个事件的回调函数。事件的回调函数在执行的过程中,可能会发出 I/O 请求或直接发射(emit)事件,执行完毕后再返回事件循环,事件循环会检查事件队列中有没有未处理的事件,直到程序结束。图3-5说明了事件循环的原理。
与其他语言不同的是,Node.js 没有显式的事件循环,类似 Ruby 的 EventMachine::run()的函数在 Node.js 中是不存在的。Node.js 的事件循环对开发者不可见,由 libev 库实现。libev支持多种类型的事件,如 ev_io、 ev_timer、 ev_signal、 ev_idle 等,在 Node.js 中均被EventEmitter封装。 libev 事件循环的每一次迭代,在 Node.js 中就是一次 Tick, libev 不断检查是否有活动的、可供检测的事件监听器,直到检测不到时才退出事件循环,进程结束。

 

好了到这里IO和事件编程就解释到这里了


0 0