在 Java、PHP 或者.net 等服务器端语言中,会为每个客户端链接建立一个新的线程而每一个线程须要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器能够同链接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就须要增长服务的数量,而 Web 应用程序的硬件成本固然就上升了。Node.js 不为每一个客户链接建立一个新的线程,而仅仅使用一个线程。当有用户链接了就触发一个内部事件,经过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。使用 Node.js,一个 8GB 内存的服务器,能够同时处理超过 4 万用户的链接json
var fs=require("fs"); function getdata() { fs.readFile("./mime.json",function (err,data) { return data.toString() }) } console.log(getdata());
对应的控制台结果:服务器
Node.js 有多个内置的事件,咱们能够经过引入 events 模块,并经过实例化 EventEmitter
类来绑定和监听事件。异步
events对象:函数
1 var event=require("events") 2 console.log(event);
打印结果:ui
{ [Function: EventEmitter] EventEmitter: [Circular], usingDomains: false, defaultMaxListeners: [Getter/Setter], init: [Function], listenerCount: [Function] }
从上面咱们能够看到,events里面有一个EventEmitter(事件触发器)对象spa
EventEmitter举例:.net
1 var event=require("events") 2 var EventEmitter=new event.EventEmitter();//实例化EventEmitter对象 3 //监听和接收广播 4 //监听名字是to_parent的广播 5 EventEmitter.on("to_parent",function (data) { 6 console.log('接收到了广播事件'); 7 console.log(data); 8 }) 9 setTimeout(function () {//有的人也把广播和接收广播成为通知和订阅 10 console.log('开始广播'); 11 //广播to_parent事件 12 EventEmitter.emit("to_parent","这是广播的内容") 13 },2000)
四、经过事件驱动获取异步方法里面的数据:线程
1 var fs=require("fs") 2 var events=require("events") 3 var EventEmitter=new events.EventEmitter(); 4 function getData() { 5 fs.readFile("./mime.json",function (err,data) { 6 EventEmitter.emit("result",data); 7 }) 8 } 9 getData(); 10 EventEmitter.on("result",function (result) { 11 console.log(result.toString());//咱们能够在EventEmitter的回调函数里面执行咱们须要异步方法返回数据的逻辑
12 })