npm gitbook 文档编辑生成器
first step : npm install -g gitbook-cli
second step : gitbook init
third step: gitbook serve (and your application is running on port 4000)
npm gitbook 文档编辑生成器
first step : npm install -g gitbook-cli
second step : gitbook init
third step: gitbook serve (and your application is running on port 4000)
nodejs 流对象操作 记录
自定义可写流
const {Writable} = require('stream')
class CounterStream extends Writable {
    
    constructor(options){
        super(options)
        this.counter = 0
    }
    _write(chunk , encoding, callback){
        console.log(chunk.toString("utf-8"))
        this.counter+=chunk.length
        callback.call()
    }
    
}
module.exports = CounterStream
关键在于继承stream.Writeable 并且重写 _write(chunk , encoding, callback)
自定义可读流
const {Readable} = require('stream')
class MyReadableStream extends Readable {
    
    constructor(options){
        super(options)
        this.isFinished = false
    
    }
    _read(size){
        //待处理数据放在this._buffer中
        if(!this.isFinished){
            this.push("abc123")
            this.isFinished = true
        }else{
            this.push(null)
        }
    }
}
module.exports = MyReadableStream
关键在于继承stream.Readable 并且重写 _read(size)
_read 方法中要把数据放到this.push的方法中 且 没有数据读取时 this.push(null) 结束读取
可以从Readable.pipe(Writable) 使用管道的方式 从可读流读取数据 pipe 到可写流中
注意 该方法为异步方法
特殊的流 socket 为双向流 可读可写
process.stdin 标准输入流
process.stdout 标准输出流
process.stderr 标准异常流
把标准输入流输出到标准输出流
const stdin = require('process').stdin
const stdout = require('process').stdout
const stderr = require('process').stderr
stdin.pipe(stdout)
执行后 主线程阻塞 读取标准输入流 读取到数据后 在 标准输出流输出
输入流事件有以下几个
输出流事件
pm2 负载均衡
pm2 start app.js -i 4
以1个主进程监听端口 4个副进程 处理nodejs请求进程
pm2 start app.js -i max
以cpu核心的数量处理nodejs请求进程
pm2 其实是利用nodejs cluster模块运行
查看http://nodejs.cn/api/cluster.html
单个 Node.js 实例运行在单个线程中。 为了充分利用多核系统,有时需要启用一组 Node.js 进程去处理负载任务。
cluster 模块可以创建共享服务器端口的子进程。
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
  console.log(`主进程 ${process.pid} 正在运行`);
  // 衍生工作进程。
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  cluster.on('exit', (worker, code, signal) => {
    console.log(`工作进程 ${worker.process.pid} 已退出`);
  });
} else {
  // 工作进程可以共享任何 TCP 连接。
  // 在本例子中,共享的是 HTTP 服务器。
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('你好世界\n');
  }).listen(8000);
  console.log(`工作进程 ${process.pid} 已启动`);
}
$ node server.js
主进程 3596 正在运行
工作进程 4324 已启动
工作进程 4520 已启动
工作进程 6056 已启动
工作进程 5644 已启动
		小程序 公众号 等多端开发 nodejs框架
pm2 为nodejs 进程管理器 为某个nodejs进程提供守护进程功能
npm install -g pm2 全局安装
pm2 start app.js 替代 node app.js 以守护进程启动app.js
pm2 start app.js –name wb123 以守护进程启动app.js 并命名为wb123
pm2 start bin/www –watch 以守护进程启动bin/www 并监控文件变化自动重启
pm2 restart wb123 重启wb123服务
pm2 stop wb123 停止服务 pm2 stop all 停止所有
pm2 delete www 删除www服务 pm2 delete all 删除所有
pm2 list 查看所有进程
pm2 monit 查看进程内存等
pm2 -h 查看命令详细
pm2 启动其他进程 在当前文件写下一个 xxx.json的脚本
pm2 start xxx.json 执行
脚本内容如下
{
  "name": "应用进程名称",
  "args": "传递给脚本的参数",
  "script": "启动的脚本路径",
  "exec_interpreter": "指定的脚本解释器",
  "exec_mode": "fork",
  "max_memory_restart": "100M",
  //其它参数
  "watch": [  // 监控变化的目录,一旦变化,自动重启
    "bin",
    "routers"
  ],
  "ignore_watch" : [  // 从监控目录中排除
    "node_modules", 
    "logs",
    "public"
  ],
  "watch_options": {
    "followSymlinks": false
  },
  "error_file" : "./logs/app-err.log",  // 错误日志路径
  "out_file"   : "./logs/app-out.log",  // 普通日志路径
  "env": {
      "NODE_ENV": "production"  // 环境参数,当前指定为生产环境
  }
}
php脚本
{
  "name": "php-socket",
  "args": "",
  "script": "./include/Socket.php",
  "exec_interpreter": "php.exe",
  "exec_mode": "fork",
  "max_memory_restart": "100M"
}
java jar包
{
    "name": "my-server",
    "script": "/usr/bin/java",
    "args": [
        "-jar",
        "server.jar"
    ],
    "exec_interpreter": "",
    "exec_mode": "fork"
}
{
      "name": "yhtAdmin",
    "script": "java",
    "args": [
        "-jar",
        "background-0.0.1-SNAPSHOT.jar"
    ],
   "error_file":"./log/err.log",
   "out_file":"./log/out.log",
   "exec_interpreter": "",
   "exec_mode": "fork"
}
		
		一次写码,多端运行的框架
		一套不错的前端框架 但貌似不太适合用在移动端 服务端也没有elementUI好 ,组件介乎移动端和pc端之间,比较好的点在于与nuxt结合得比较好,可以可快速开发
一套很不错的移动端vue框架和vant齐名
		基于vue的移动端开发组件库(有赞)
		其实就是执行kibana项目下的package.json的build命令,默认是打包三个平台的压缩包。具体执行流程在kibana / src / dev / build / build_distributables.js这个文件,分为环境验证,环境下载(nodejs下载这个地址在国外,可以手动改为国内地址),执行对应环境的npm初始化,下载dependencies。执行编译、打包(压缩包)。最后是sha码验证。前几步其实执行了一次后可以跳过。重要的是 后面的编译打包。
