Giter Club home page Giter Club logo

burnjs's People

Contributors

foveluy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

burnjs's Issues

【egg-ts-service基本使用.md】的建议

this.ctx.body = `hi, egg , this is ${service.home.addnumber(3, 5)}`;

如果按照文章中这样输出 addnumber 方法的结果会是:

hi, egg , this is [object Promise]

这里应该修改为:

this.ctx.body = `hi, egg , this is ${ await service.home.addnumber(3, 5) }`

这样的结果才会是:

hi, egg , this is 8

关于 loadService

我们想要在controller中使用this.ctx.service.check.index();这样的形式,那我们必须要对ctx.service的getter进行重写。
我们在controller中可能会多次使用到this.ctx.service对象,所以我们必须要对其进行缓存,不然每次使用,我们都遍历service文件夹,导入模块,重新生成所有service对象,再挂载,我们的性能会急剧下降。

如果直接在外部初始化,是不是就不需要缓存了?这两种写法有什么 优劣吗?(loadConfig 好像也是类似这么实现的)

loadService() {
    const services = fs.readdirSync(__dirname + '/service');
    const loaded = {};

    services.forEach(serivce => {
        const name = serivce.split('.')[0];
        const mod = require(__dirname + '/service/' + services);
        loaded[name] = new mod(this);
    })

    Object.defineProperty(this.app.context, 'service', {
        get() {
            return loaded
        }
    })
}

node的cluster子进程退出问题

cluster中

在nodejs中,cluster子进程因为某种原因disconnect之后,会处理完所有的数据之后,自动被master重启。

import { Burn } from './core';
import * as cluster from 'cluster';
import * as os from 'os';
import { EventEmitter } from 'events';


export default class BurnCluster extends EventEmitter {
    constructor() {
        super();
    }

    forkWorkers() {
        const numCPUs = os.cpus().length;

        if (cluster.isMaster) {
            // Fork workers.

            console.log(`master进程#${process.pid}`)
            for (let i = 0; i < numCPUs; i++) {
                cluster.fork();
            }
            cluster.on('fork', function (worker) {
                console.log('worker ' + worker.process.pid + ' start');
                worker.on('message', (msg) => {
                    console.log(msg + 'from ' + worker.process.pid)
                })
            })

            cluster.on('online', function (worker) {
                worker.disconnect();
            })

            cluster.on('exit', function (worker, code, signal) {
                console.log('worker ' + worker.process.pid + ' died');
                // cluster.fork();
            });

            cluster.on('disconnect', function (worker) {
                if (worker.isDead) {
                    console.log('工作进程 #' + worker.id + ' 已经死亡');
                }
                console.log('工作进程 #' + worker.id + ' 断开了连接');
            })

            cluster.on('listening', (worker, address) => {

            });


        } else {
            const app = new Burn;

            app.run();

            // process.on('message', function (msg) {
            //     console.log('3:', msg);
            // });

            // (<any>process).send('你好');
        }
    }
    startCluster() {
        this.forkWorkers();
    }
}

worker进程的master被杀死之后,worker都会立即自杀。

childprocess中

在cluster master中,childprocess收到disconnect后,不会自动被集群重启。

需要认为的手动退出和重启。

在master死后,childprocess也不会自动杀死自己,而是变成孤儿进程。

关 Typescript 问题

你好:

import { Controller } from "./base";
//user.ts
export default class User extends Controller {
    async user() {
        this.ctx.body = this.ctx.service.check.index(); // 这里仅仅爆 service 找不到,并不影响运行。
    }

    async userInfo() {
        this.ctx.body = 'hello userinfo';
    }
}

我在 base.ts 临时加了 any,也没有找到好的方法

import { BaseContext } from "koa";
interface SelfBaseContext extends BaseContext {  //继承接口 BaseContext
    service: any
}

export class Controller {
    ctx: SelfBaseContext;
    constructor(ctx: SelfBaseContext) {
        this.ctx = ctx;
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.