Node.js初体验

Node是一个服务器端javaScript解释器,可是真的以为javaScript不错的同学学习Node就能轻松拿下,那么你就错了,Node的目标是帮助程序员构建可伸缩的应用程序,编写能够处理数万条同时连接到一个物理机的连接代码。

Node.js是一个允许开发人员使用JavaScript语言编写服务器端代码的框架。

1、Node是一个服务器端JavaScript解释器,可是真的以为JavaScript不错的同学学习Node就能轻松拿下,那么你就错了,总结:水深不深我还不知道,不过确实不浅。

2、Node的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个物理机的连接代码。处理高并发和异步I/O是Node受到开发人员的关注的原因之一。

3、Node本身运行Google V8 JavaScript引擎,所以速度和性能非常好,看chrome就知道,而且Node对其封装的同时还改进了其处理二进制数据的能力。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各种环境下更加给力。

4、第三方的扩展和模块在Node的使用中起到重要的作用。

hello.js

View Code
1 var http = require("http"); 
2  http.createServer(function (req, res) { 
3     res.writeHead(200, {"Content-Type": "text/plain"});   
4     res.end("Hello World!yxd\n");  
5  }).listen(1338, "127.0.0.1");
6  console.log("Server running at http://127.0.0.1:1338/"); 

 代码逻辑

a.全局方法require()是用来导入模块的,一般直接把require()方法的返回值赋值给一个变量,在JavaScript代码中直接使用此变量即可。require("http")就是加载系统预置的http模块

b.http.createServer是模块的方法,目的就是创建并返回一个新的web server对象,并且给服务绑定一个回调,用以处理请求。

c.通过http.listen()方法就可以让该HTTP服务器在特定端口监听。

d.console.log就不用多说了,了解firebug的都应该知道,Node实现了这个方法。

 

理解Node的模块概念

1、如何使用模块?

在Node中使用模块式非常方便的,在JavaScript代码中可以直接使用全局函数require()来加载一个模块。

 

共有属性和共有方法的声明需要在前面加上this关键字。

Node能做什么和它的优势

Node核心思想:1、非阻塞;2、单线程;3、事件驱动

Node和操作系统有一种约定,如果创建了新的链接,操作系统就将通知Node,然后进入休眠。如果有人创建了新的链接,那么它(Node)执行一个回调,每一个链接只占用了非常小的(内存)堆栈开销。

 

Node是无阻塞的,新请求到达服务器时,不需要为这个请求单独作什么事情。Node仅仅是在哪里等待请求的发生,有请求就处理请求。

 

Node更擅长处理体积小的请求以及基于事件的I/O。

View Code
1 var events=require("events");
2 var emitter=new events.EventEmitter();
3 emitter.on("MyEvent",function(msg){
4     console.log(msg);
5 });
6 emitter.emit("MyEvent","Hello World.");

简单的分析这段:

1、使用reuqire()方法添加了events模块并把返回值赋给了一个变量

2、new events.EventEmitter()这句创建了一个事件触发器,也就是所谓的事件模块中的EventEmitter类的实例

3、on(event,listener)用来为某个事件event添加事件处理方法监听器

4、emit(event,[arg1],[arg2],[...])方法用来产生事件。以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。

 

EventEmitter类中的方法都与事件的产生和处理相关:

1、addListener(event,listeer)和on(event,listener)这两个方法都是将一个监听器添加到指定事件的监听器数组的末尾

2、once(event,listener)这个方法为事件添加一次性的监听器。该监听器在事件第一次触发时执行,过后将被移除

3、removeListenr(event,listener)该方法用来将监听器从指定事件的监听器数组中移除出去

 

在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口。

流可以是可读的,可写的,或者既可读又可写。所有流都是EventEmitter的实例,因此可以产生各种不同的事件。

 

可读流主要会产生以下事件:

data当读取到流中的数据时,此事件被触发

end当流中没有数据可读时,此事件被触发

error当读取数据出现错误时,此事件被触发

close当流被关闭时,此事件被触发,可是并不是所有流都会触发这个事件。(例如,一个连接进入的HTTP request流就不会触发"close"事件。)

 

强大的File System文件系统模块

Node中的fs模块用来对本地文件系统进行操作。文件的I/O是由标准POSIX函数封装而成。需要是由require("fs")访问这个模块。所有的方法都提供了异步和同步两种方式。

fs模块中提供的方法可以用来执行基本的文件操作,包括读、写、重命名、创建和删除目录以及获取文件元数据等。每个操作文件的方法都有同步和异步两个版本。

异步操作的版本都会使用一个回调方法作为最后一个参数。当操作完成的时候,该回调方法会被调用。而回调方法的第一个参数总是保留为操作时可能出现的异常。如果操作正确成功,则第一个参数的值是null或undefined。

同步操作的版本的方法名称则是在对应的异步方法之后加上一个Sync作为后缀。比如异步的rname()方法的同步版本是renameSync()。

 

 

简单地说,NodeJs是一个使用了Google高性能V8引擎的服务器端JavaScript实现。它提供了一个(几乎)完全非阻塞I/O栈,与JavaScript提供的闭包和匿名函数相结合,使之成为编写高吞吐量网络服务程序的优秀平台。

特点:

单线程事件模型,简单高效

基于活跃的高性能V8引擎

社区活跃,组件丰富

posted @ 2014-10-10 10:52  Damon201611  阅读(141)  评论(0)    收藏  举报