美文网首页Node.js
nodejs的缓存和进程

nodejs的缓存和进程

作者: 天问ing | 来源:发表于2019-01-09 00:36 被阅读0次

    缓存

    缓存是前后端数据交互很重要的一部分,利用缓存可以节约网络带宽,节省花销,具体的实现步骤如下:

    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);
    }
    

    相关文章

      网友评论

        本文标题:nodejs的缓存和进程

        本文链接:https://www.haomeiwen.com/subject/vrgirqtx.html