美文网首页
缓存/Node多进程/转码

缓存/Node多进程/转码

作者: 子心_ | 来源:发表于2019-07-09 09:42 被阅读0次

缓存

    // 使用cache-control 控制缓存策略,expires 控制缓存时间
    res.setHeader('cache-control','no-cache');//设置不缓存,这是个坑
    // 第一次请求时,服务器像浏览器发送了文件最后修改啊日期,
    // 浏览器再次向服务器发送请求时,会将当前的最后修改日期发送,如果服务器发现该日期是最新版,就会直接返回304.否则会发送新的文件.
    const server = http.createServer((req,res)=>{
        let {pathname} = url.parse(req.url);   
        // let gz = zlib.createGzip();
        // res.setHeader('content-encoding','gzip');
        // ins.pipe(gz).pipe(res);
        //获取并处理文件最后一次的修改日期
        fs.stat(`www${pathname}`,(err,stat)=>{
            if(err){
                res.writeHead(404);
                res.write('Not Found');
                res.end();
            }else{
                if(req.headers['if-modified-since']){//如果浏览器发送了版本日期
                    let reqdate = req.headers['if-modified-since'];//获取日期
                    let oDate = new Date(reqdate);//转换成Date日期
                    let tClient = Math.floor(oDate.getTime()/1000);//浏览器发送过来的日期
                    let tServer = Math.floor(stat.mtime.getTime()/1000);//服务器查到的日期
                    if(tServer>tClient){//如果服务器比较新,就发送新的
                        sendFileToClient();
                    }else{//使用缓存
                        res.writeHead(304);
                        res.write('Not Modified');
                        res.end();
                    }

                }else{//没发送版本日期的时候,直接发送文件
                    sendFileToClient();
                }
    
            }
            function sendFileToClient(){
                let ins =fs.createReadStream(`www${pathname}`);
                res.setHeader('Last-Modified',stat.mtime.toUTCString());//此处处理头,将最后一次文件的修改信息传给浏览器
                ins.pipe(res);
                ins.on('error',err=>{
                    res.writeHead(404);
                    res.write('Not Found');
                    res.end();
                })
            }
        })
    }); 

Node多进程

Node.js默认情况下是单进程与单线程的
使用cluster 、process 模块
多进程
    1. 是安全的,而且性能高.
    2. 普通程序不能创建进程,只有系统进程才可以创建进程.
    3. 进程是分裂出来(只有主进程可以分裂,子进程不可以分裂),分裂出来的两个进程执行的是同一套代码(即父子进程执行同一套代码).
    4. 父子进程之间可以分享句柄.
const cluster = require('cluster');
    const http = require('http');
    const cluster = require('cluster');//创建进程模块
    const os = require('os');//系统模块,用来获取当前主机有几个CPU
    const process = require('process');//控制进程模块
    if(cluster.isMaster){//判断是主进程,才可以分裂
        for(let i=0;i<os.cpus().length;i++){//控制有几个CPU就分裂几次
            cluster.fork();//进程分裂
        }
        console.log('主进程');
    }else{//如果是个子进程就开启一个服务器
        const server = http.createServer((req,res)=>{
            console.log(process.pid);//获取进程ID
            res.write('s')
            res.end();
        })
        server.listen(8087)
        console.log('子进程开启的8087服务器');
    }

数据库

数据库
    1. 服务端(下载的mysql数据库)
    2. 客户端(Navicat、NodeJS、JAVA、PHP等)

扩展

使用encodeURIComponent
使用encodeURIComponent('待转码字符') 在前端将数据转码,
使用decodeURIComponent('转码后的字符') 在服务器端将数据转回.
断点续传
使用content-range 进行断点续传操作.

相关文章

  • 缓存/Node多进程/转码

    缓存 Node多进程 数据库 扩展 使用encodeURIComponent使用encodeURIComponen...

  • Node.js多进程

    Node.js多进程Node.js单线程模式运行的,使用事件处理并发。 exec() 使用子进程的执行命令,缓存子...

  • nodejs的缓存和进程

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

  • Redis适合的场景

    Redis适合的场景 一、【进程内】缓存和【进程外】缓存 【进程内】缓存:就是把数据缓存在服务的进程内,就是进程内...

  • react-native其他速记

    grep node 查看node进程 pkil -9 node 杀掉node进程 homebrew watchma...

  • he: HTML entity encoder/decoder

    Node.js HTML entity encoder/decoder 转码 https://github.com...

  • 今日前端总结与反思

    1.服务器node进程一直启动,需要启动任务管理器把进程拿掉2.chrome缓存一定要即使清除3.闭包用法需要再复...

  • 偶尔用到的linux命令

    查看node进程 关掉进程

  • 高并发下为什么更喜欢进程内缓存

    进程内缓存是指缓存和应用程序在相同地址空间。即同一个进程内。分布式缓存是指缓存和应用程序位于不同进程的缓存,通常部...

  • 前台系统本地缓存和分布式缓存实现方案

    根据缓存是否与应用进程属于同一进程,可以将内存分为本地缓存和分布式缓存。本地缓存是在同一个进程内的内存空间中...

网友评论

      本文标题:缓存/Node多进程/转码

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