nodejs的缓存和进程
2019-01-09 本文已影响0人
天问ing
缓存
缓存是前后端数据交互很重要的一部分,利用缓存可以节约网络带宽,节省花销,具体的实现步骤如下:
const http = require("http");
const url = require("url");
const fs = require("fs");
let server = http.createServer((req,res)=>{
let {pathname} = url.parse(req.url);
//读取文件的信息
fs.stat(`www${pathname}`,(err,stat)=>{
if(err){
res.writeHeader(404);
res.write("Not Found");
res.end();
}else{
//判断客户端的请求头里面是否有if-modified-since
if(req.headers["if-modified-since"]){
//获取客户端和服务端文件的修改时间
let cDate = new Date(req.headers["if-modified-since"]);
let sDate = new Date(stat.mtimeMs);
let time_client = Math.floor(cDate.getTime()/1000);
let time_server = Math.floor(sDate.getTime()/1000);
if(time_client < time_server){
sendToClient();
}else{
res.writeHeader(304);
res.write("Not Modified");
res.end();
}
}else{
sendToClient();
}
function sendToClient(){
let rs = fs.createReadStream(`www${pathname}`);
let mDate = new Date(stat.mtimeMs);
res.setHeader("last-modified",mDate.toUTCString());
rs.pipe(res);
rs.on("error",(err)=>{
res.writeHeader(404);
res.write("Not Found");
res.end();
})
}
}
})
})
server.listen(8080);
进程
nodejs默认是单进程、单线程运行的,但是可以通过官方提供的cluster(集群)模块可以实现多进程机制,可以最大化利用cpu的资源,具体的实现如下:
// cluster的中文意思是集群,目的的最大程度的发挥服务器的cpu性能,多个进程运行相同的代码
const cluster = require("cluster");
let os = require("os");
const http = require("http");
const fs = require("fs");
const url = require("url");
const process = require("process");
//只有主进程才可以去派生其他的进程
//主进程:守护进程 --- 用于派生子进程
//子进程: 工作进程 --- 用于执行代码
if(cluster.isMaster){
let numCpus = os.cpus().length;
for(let i =0;i<numCpus;i++){
cluster.fork();
}
}else{
let server = http.createServer((req,res)=>{
console.log(process.pid);
let {pathname} = url.parse(req.url);
let rs = fs.createReadStream(`www${pathname}`);
rs.pipe(res);
rs.on("error",(err)=>{
res.writeHeader(404);
res.write("Not Found");
res.end();
})
})
server.listen(8080);
}