Categories
nodejs

gitbook

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)

Categories
nodejs

nodejs Stream

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)

执行后 主线程阻塞 读取标准输入流 读取到数据后 在 标准输出流输出

输入流事件有以下几个

输出流事件

Categories
nodejs

pm2 loadbalance

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 已启动
Categories
nodejs

Taro

小程序 公众号 等多端开发 nodejs框架

Categories
nodejs

pm2

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"
}
Categories
nodejs

uniapp

一次写码,多端运行的框架

Categories
nodejs

vuetify

一套不错的前端框架 但貌似不太适合用在移动端 服务端也没有elementUI好 ,组件介乎移动端和pc端之间,比较好的点在于与nuxt结合得比较好,可以可快速开发

https://v2.vuetifyjs.com/zh-Hans/

Categories
nodejs

vux

一套很不错的移动端vue框架和vant齐名

https://doc.vux.li/zh-CN/components/actionsheet.html

Categories
nodejs

vant

基于vue的移动端开发组件库(有赞)

https://vant-contrib.gitee.io/vant/#/zh-CN/ 文档地址

Categories
nodejs

Kibana打包

其实就是执行kibana项目下的package.json的build命令,默认是打包三个平台的压缩包。具体执行流程在kibana / src / dev / build / build_distributables.js这个文件,分为环境验证,环境下载(nodejs下载这个地址在国外,可以手动改为国内地址),执行对应环境的npm初始化,下载dependencies。执行编译、打包(压缩包)。最后是sha码验证。前几步其实执行了一次后可以跳过。重要的是 后面的编译打包。

任务流程一览(kibana / src / dev / build / build_distributables.js)