zoukankan      html  css  js  c++  java
  • cluster模块设置子进程的stdio

    原因

    子进程的stdout及stderr需要被设置为某个文件,根据文档 setupMaster 说明,需要设置stdio数组:

    c.setupMaster({
            exec: `${cwd}/c.js`,
            stdio: [0, 1, 2, 'ipc']
    })
    

    其中,stdio中的项可以为数组。

    小问题

    master.js

    let c = require('cluster');
    let fs = require('fs');
    let path = require('path');
    let cwd = process.cwd();
    
    let o = fs.createWriteStream(path.join(cwd, 'out.log'));
    c.setupMaster({
            exec: `${cwd}/c.js`,
            stdio: [0, o, o, 'ipc']
    })
        
    c.fork();
    

    c.js

    console.log(13324)
    console.error('error')
    

    如果直接这样使用,则会抛错

    throw new errors.TypeError('ERR_INVALID_OPT_VALUE', 'stdio',
          ^
    TypeError [ERR_INVALID_OPT_VALUE]: The value "WriteStream"
    

    原因是stdio中的stream对象还未准备好,因此需要提前创建流。
    如下:

    let c = require('cluster');
    let fs = require('fs');
    let path = require('path');
    let cwd = process.cwd();
    
    let o = fs.createWriteStream(path.join(cwd, 'out.log'));
    
    setTimeout(() => {
        c.setupMaster({
            exec: `${cwd}/c.js`,
            stdio: [0, o, o, 'ipc']
        })
        
        c.fork();
    },10)
    
  • 相关阅读:
    vue+layui制作列表页
    基础JQ框架
    MVC返回数据流,ajax接受并保存文件
    js验证表单
    jq扩展获取表单值、设置值
    常用sql记录
    JSON
    JS和JQUERY的区别
    用面向对象的方式进行数据访问
    win7旗舰版梦幻主题补丁~完美你的桌面
  • 原文地址:https://www.cnblogs.com/accordion/p/12023874.html
Copyright © 2011-2022 走看看