美文网首页
node子进程案例

node子进程案例

作者: 姜治宇 | 来源:发表于2024-04-07 15:19 被阅读0次

以nestjs为例,如果有这样两个路由A和B,其中A是给前端提供数据展示的,B是长任务,比如解压很大的压缩包。如果不开启子进程,那执行B操作就会占用主进程资源,让A访问变慢,此时就要把B踢到子进程去执行。

app.controller.ts:
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}
  @Get()
  getHello() {
    return this.appService.getHello();
  }
  @Get('longtask')
  async doLongTask() {
    const res:any = await this.appService.startLongTask({ id: 10 });
    return res;
  }
}
app.service.ts:
import { Injectable } from '@nestjs/common';
import { fork, ChildProcess } from 'child_process';
@Injectable()
export class AppService {
  private worker: ChildProcess;
  getHello(){
    return {code:0,success:true,msg:'show now!'}
  }
  startLongTask(data: any) {
    return new Promise(resolve=>{
      this.worker = fork('dist/longTask.js');
      this.worker.send({ type: 'start', data });
  
      // 接收子进程发送的消息
      this.worker.on('message', (result) => {
        console.log('子进程返回的结果:', result);
        resolve(result);
      });
  
      // 监听子进程的退出事件
      this.worker.on('exit', (code, signal) => {
        console.log(`子进程已退出,退出码:${code},信号:${signal}`);
        this.worker.removeAllListeners();// 取消事件监听器以释放资源
        this.worker = null;
      });
    });

  }
}

子进程可以是ts,不过访问的路径应该是dist目录下的js文件,这是实时编译的。

longTask.ts:
// longTask.js
process.on('message', (message: any) => {
  console.log('子进程接收到的信息>>>', message);
  if (message.type === 'start') {
    // 执行长任务
    setTimeout(() => {
      const result = { code: 0, success: true, data: message.data };
      process.send(result);
    }, 10000);

    // 完成后将结果发送回主进程
  }
});

相关文章

  • Node.js多进程

    Node.js多进程Node.js单线程模式运行的,使用事件处理并发。 exec() 使用子进程的执行命令,缓存子...

  • 12.13Electron/子进程/数组删除操作/git pus

    使用 Electron 处理窗体崩溃和挂起 node.js(七) 子进程 child_process模块 子进程 ...

  • Node子进程进阶

    最近在做12306爬虫,刚好遇到了Node子进程的应用场景,不总结不快: Node的child_process模块...

  • Node学习指南

    为什么要有Node子进程 node遵循的是单线程单进程的模式,node的单线程是指js的引擎只有一个实例,且在no...

  • react-native其他速记

    grep node 查看node进程 pkil -9 node 杀掉node进程 homebrew watchma...

  • Node.js--子进程

    简介 node.js是基于单线程模型架构,这样可以带来高效的CPU利用率,但是无法却利用多核心的CPU,为了解决这...

  • tips

    1.node采用子进程的方式来解决单一进程的阻塞 2.node 利用libuv作为平台层来实现和操作系统的剥离 3...

  • child_process 子进程

    默认情况下,会在父 Node.js 进程和衍生的子进程之间建立 stdin、stdout 和 stderr 的管道...

  • Node.js(多进程)

    Node 提供了 child_process 模块来创建子进程,方法有: exec - child_process...

  • 在 Node.js 中通过子进程操作标准输入/输出

    在本中,我们在 Node.js 中把 shell 命令作为子进程运行。然后异步读取这些进程的 stdout 并写入...

网友评论

      本文标题:node子进程案例

      本文链接:https://www.haomeiwen.com/subject/hqftxjtx.html