node.js的简单使用
一,node.js的简介
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 发布于2009年5月,由Ryan Dahl开发。
Node.js 不是一个 JavaScript 框架,是一个让 JavaScript 运行在 服务端 的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 使用了单线程模型,执行速度快,但耗内存多(百万级并发测试,未优化情况下1M的连接,消耗16G的内存) 。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
二,node.js的优缺点
(1)优点:
-
高并发(最重要的优点);
-
适合I/O密集型应用。
-
(2)缺点:
-
不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大 循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
-
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起。
-
只支持单核CPU,不能充分利用CPU;
可靠性低,一旦代码某个环节崩溃,整个系统都崩溃。原因:单进程,单线程。
解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
( 2)开多个进程监听同一个端口,使用cluster模块; -
开源组件库质量参差不齐,更新快,向下不兼容;
-
Debug不方便,错误没有stack trace。
三,创建一个服务器
let http = require("http");//引入http模块
var server= http.createServer((req,res)=>{
//创建服务器
res.writeHead(200,{'Content-Type':'text/html ; charset=utf-8'})
//格式的控制
res.write("hellow nodejs");
res.end;
});
server.listen(8888);//端口号8888
可以在终端中用node 文件名 运行
四,阻塞与非阻塞
let fs = require("fs");
console.log("开始点餐....")
for(let i = 0; i < 100000000; i++);
console.log("循环完毕");
// 阻塞:同步
let result = fs.readFileSync("./file/a.txt");
console.log(result.toString());
//转换为字符串不然得到的就是二进制的编码
console.log("结束,下一个")
注意:阻塞就是同步的象征 必须要排队 前一个程序没有执行完毕 后面的只可以等待着
console.log(result.toString());输出字符串 不然就是你看不懂的二进制编码
非阻塞 我就不说了 同理可以推出 非阻塞就是服务器一直接受请求 谁的请求完成了 就返回结果 返回的结果没有先后 就看是谁先处理完毕。
五,事件驱动
//JS监听事件 btn.onclick = function("click", function(event){})
// JS触发事件:按钮被点击
let events = require("events");
// 创建EventEmitter对象
let eventEmitter = new events.EventEmitter();
// 绑定connect事件:当connect事件被触发时,回调函数被执行
eventEmitter.on("connect", function(){
console.log("连接成功");
// 触发事件
eventEmitter.emit("getData");
});
// 绑定getData事件
eventEmitter.on("getData", function(){
console.log("接收了数据")
});
// 触发connect事件
eventEmitter.emit("connect");
注意:node.js下面的有很多事件 和事件触发 。