Node.js

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);
}
上一篇 下一篇

猜你喜欢

热点阅读