Node.js 入门初探

初步印象

Node.js is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

       以上是Node.js官网Node.js的介绍,从中我们可以获取关于Node.js的信息:

  • 是一个JavaScript运行平台,而不是JavaScript脚本或者应用程序。
  • 使用事件驱动
  • 使用非阻塞I/O模型
  • 单线程

       以上信息意味着Node.js处理浏览器请求时,一次只能处理一个请求,多个请求会放到一个请求队列里,通过事件轮询的方式处理,当处理请求中涉及到的IO操作时,不会阻塞Node.js服务器处理后续的web请求。此外事件驱动的特性也表明了Node.js服务器和客户端之间可以进行双向的请求,不再是传统上的浏览器发出请求,服务器只能对请求进行响应,事件驱动中,服务器同样可以使用事件发射器 emit('event_name') 触发一个事件,浏览器可以使用on('event_name', function(){...})对这个相应的逻辑处理。

Hello World

       然后我们来看看如何使用Node.js写我们自己的应用程序,现在Node.js已经更新的5.5版本,我们可以去官网上下载,windows环境下安装非常简单,和安装一个普通的应用程序一样,下一步下一步就可以了。

       下面我们通过几个例子简单的了解一下Node.js中的语法和一些特性。

var fs = require('fs');  //包含fs模块
var events = require('events');  //包括进events模块
var eventEmitter = new events.EventEmitter();  // 创建一个事件发射器
//方便测试写了一个cpu阻塞函数
function sleep(milliSeconds) { 
    var startTime = new Date().getTime(); 
    while (new Date().getTime() < startTime + milliSeconds);
};
eventEmitter.on('connection', function(){
    console.log('连接成功');
    eventEmitter.emit('data_received'); //触发 data_received 事件
});

//可以使用这种  addListener 添加一个事件发射器
eventEmitter.addListener('data_received', function(){
    console.log('----data_received----');
});

eventEmitter.on('data_received', function(){
    console.log('数据接收成功');
});

//也可以直接通过 on 添加一个事件发射器
eventEmitter.on('data_received1', function(){
    fs.readFile("input.txt", function(err, data){
        console.log("data--"+data.toString());
    });
    console.log('数据接收成功1');
});
eventEmitter.on('data_received2', function(){
console.log('数据接收成功2');
});

eventEmitter.on('data_received3', function(){
    console.log('数据接收成功3');
});
eventEmitter.on('data_received4', function(){
    console.log('数据接收成功4');
});
eventEmitter.on('data_received5', function(){
    console.log('数据接收成功5');
});

function demo2(){
    eventEmitter.emit('data_received2');
}

function demo4(){
    eventEmitter.emit('data_received4');
}

function demo5(){
    eventEmitter.emit('data_received5');
}

eventEmitter.emit('connection');
eventEmitter.emit('data_received1');
setTimeout(demo2,1000);
var t = setTimeout(demo4,3000);
setTimeout(demo5,2000);
eventEmitter.emit('data_received3');
clearTimeout(t);
console.log('程序处理完成');

以下为运行结果:
连接成功
----data_received----
数据接收成功
数据接收成功1
数据接收成功3
程序处理完成
data--node.js test test test test test test test
数据接收成功2
数据接收成功5

结果分析:

先是触发了connection事件, 在处理connection事件的回调函数中触发了data_received事件
data_received事件添加了两个事件回调函数,分别使用addlistener和on方式添加,都会执行,按照添加顺序执行。
然后触发了data_received1事件,这个事件的回调函数中有io操作,但是没有阻塞,可以看出node.js的非阻塞特性
然后使用setTimeout方式添加了demo2 demo4 demo5,但是由于事件的关系,需要到1秒后 3秒后 2秒后 触发这三个事件
紧接着触发了data_received3事件,删除setTimeout方式添加的demo4以及输出程序处理完成,这时分别处理了3和完成输出。
而后IO操作执行完成,然后demo2demo5的时间分别到期触发了相应操作。

今天先介绍这个简单的Demo,入门者可以参考Node.js 教程 | 菜鸟教程这个教程。从中了解很多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值