ddv-worker

0.0.30 • Public • Published

ddv-worker

npm package NPM downloads

  • ddv-worker 是 ddv 的一个核心模块,他实现了整个线程的管护和管理,已经虚拟主机的 socket 的线程之间的转发

一、初始化

var worker = require('ddv-worker');

二、使用

1、子线程

  • 所有的站点都依赖这个模块开发,该模块需要开发者提供一个http-server
  • 比如封装了 testworker.js
'use strict';
//定义进程标题
process.title = 'ddvSizeTest';
//jsnet模块-子线程模块
const worker = require('ddv-worker');
//Express 应用生成器
const express = require('express');
//生成一个应用
const app = express();
//服务调度模块
worker.server = http.createServer(app);
 
//app的进一步开发
 
worker.config = Object.create(null);
 
//标记没有启动过
let isStart = false ;
//导出一个模块-服务启动
module.exports = function start(c){
  worker.config = c || worker.config || Object.create(null);
  c = void 0;
  if (isStart===true) {
    //防止重复启动
      console.warn('不能重复开始');
      return ;
  }
    worker.server.setConfig(worker.config);
  //发送所以修改给管理线程,更新 监听信息
    worker.updateServerConf({
        //修改是否默认监听站点
        defaultListen: worker.config.defaultListen,
        //修改监听数组
        listen : worker.config.listen,
        //修改监听cpu核数
        cpuLen : worker.config.cpuLen,
    }, (e)=>{
        if (e) {
            console.log(`[pid:${process.pid}][wid:${worker.id}]更新服务器监听配置参数失败!`);
        }else{
            console.log(`[pid:${process.pid}][wid:${worker.id}]更新服务器监听配置参数成功!`);
        }
    });
};
 
/***********************异常错误处理模块开始***********************/
 
//服务器错误捕获,抛出到server::error
worker.server.on('error', function (e) {
    //客户端socket重置 忽略这一错误
    if (e.message == 'read ECONNRESET'&&e.name === 'Error') {
        return false;
    }else{
        worker.emit('server::error',e);
    }
    e = undefined ;
});
//server错误捕获处理
worker.on('server::error',function(e){
    if(e.stack){
        e.stack = Error().stack;
    }
    e.stack +='\nthis error is server error';
    worker.emit('error',e);
});
//socket错误捕获处理
worker.on('socket::error',function(e){
    if(e.stack){
        e.stack = Error().stack;
    }
    e.stack +='\nthis error is socket error';
    worker.emit('error',e);
});
 
//错误
worker.on('error',function(e){
    console.error(`[pid:${process.pid}][wid:${worker.id}]服务器内部错误开始`);
    console.error(e);
    console.error(`[pid:${process.pid}][wid:${worker.id}]服务器内部错误结束`);
    console.error(Error().stack);
});
 
/***********************异常错误处理模块结束***********************/
 
 
 
  • 以下是index.js
 
require('./testworker.js')({
    //非默认站点
    defaultListen:false,
    //监听数组
    listen:[
        {
            'type':'tcp',
            'host':'rpc.iceovideo.ping-qu.com',
            'port':80
        }
    ],
    //监听cpu核数
    cpuLen:1
});
 
  • 通过以下代码运行
 
node index.js
 

2、管理线程

  • master.js
 
//引入管理线程模块
const master = require('ddv-worker');
 
master.on('error',function masterError(e){
    log.tip('ERR ','MASTER_ERROR_WARN');
    log.error(e);
});
master.on('server::listening',function masterError(info){
    log.tip('INFO',['MASTER_SERVER_LISTENING', info&&info.type_port_ip]);
});
master.on('server::close',function masterError(info){
    log.tip('INFO',['MASTER_SERVER_LISTENING_CLOSE', info&&info.type_port_ip]);
});
master.on('server::error',function masterError(e){
    log.tip('ERR ','MASTER_SERVER_ERROR_WARN');
    log.error(e);
    process.exit(1);
});
 
//主进程启动完毕
master.on('loadend',function masterInit(){
    let site = {};
    site.logOutput = site.logOutput || path.join(site.path, 'log/output.log');
    site.logError = site.logError || path.join(site.path, 'log/error.log');
    site.logAll = site.logAll || path.join(site.path, 'log/all.log');
    //站点文件
    site.workerFile = site.workerFile || site.path;
    master.loadSite(site);
    //服务器启动
    master.serverRun();
    //重新载入站点
    master.reLoadSite();
 
});
 
 

3、守护线程

  • daemon.js
 
//引入守护线程模块
const DdvDaemon = require('ddv-worker/daemon');
let daemon = new DdvDaemon();
//监听加载完毕
daemon.on('loadend',()=>{
    //设置管理线程启动文件
    daemon.setMasterFile(path.resolve(__dirname,'./master.js'));
    //开始运行管理线程
    daemon.run();
});

Readme

Keywords

Package Sidebar

Install

npm i ddv-worker

Weekly Downloads

14

Version

0.0.30

License

ISC

Unpacked Size

112 kB

Total Files

37

Last publish

Collaborators

  • coderpreacher
  • huadichan
  • yuchonghua