koa 使用多进程

使用 nodejs 的 koa 框架作为后端服务时,为了充分利用服务器的核数,可以创建与cpu 数量相同的进程数。

创建多进程中可以使用 child_process 也可以使用 cluster。但是创建了多个进程后还需要考虑负载均衡。因为 cluster 中自己做了负载均衡的算法: round-robin(新连接由主进程接受,然后由它选择一个可用的 worker 把连接交出去,说白了就是轮转法)所以使用 cluster

这里创建进程时,让子进程监听同一端口。
可能会问:多个子进程监听同一端口会报错啊。

实际上,在 node 中进行了处理。当有多个进程监听端口时,Master 进程创建一个 Socket 并绑定监听到该目标端口,通过与子进程之间建立 IPC 通道之后,通过调用子进程的 send 方法,将 Socket(链接句柄)传递过去。端口只会被主进程绑定监听一次,但是主进程和子进程在建立 IPC 通信之后,发送 Socket 到子进程实现端口共享,在之后 Master 接收到新的客户端链接之后,通过负载均衡技术再转发到各 Worker 进程

下面是 koa 框架中创建多进程:

import Koa from "koa";
import route from "./router";
import cors from "@koa/cors";
import bodyParser from "koa-bodyparser";
import cluster from "cluster";
const numCPUs = require("os").cpus().length;if (cluster.isMaster) {for (var i = 0; i < numCPUs; i++) {cluster.fork();}// 监听workercluster.on("listening", function (worker, address) {console.log("listening: worker " +worker.process.pid +", Address: " +address.address +":" +address.port +"," +address.addressType);});// 监听worker退出事件,code进程非正常退出的错误code,signal导致进程被杀死的信号名称cluster.on("exit", function (worker, code, signal) {console.log("工作进程 %d 关闭 (%s)(%s). 重启中...",worker.process.pid,signal || code);cluster.fork();});
} else {const app = new Koa();app.use(cors());app.use(bodyParser());route(app);app.listen(3000);
}

我这里使用了 typescript 所以可以使用 import 和 require 混合搭配。如果编写 js 的话把 import 都改成 require 就好了。

koa cluster 使用多进程相关推荐

  1. 八七、Node.js事件循环与多进程

    nodejs事件循环与多进程 why 事件循环对于深入理解nodejs异步至关重要 fs, net,http,events 事件循环是企业面试中的最高频考题之一 能驾驭nodejs多进程是一名资深前端 ...

  2. 多进程Twemproxy

    多进程Twemproxy实现 需求来源 因为twemproxy的性能低于Redis的性能,如果需要发挥Redis的全部性能,就需要部署多台Twemproxy.这样对于运维人员而言,增加了维护难度,对于 ...

  3. 时隔一年半,我,一个卑微的前端初学者,又来写面经了

    高德 滴滴 美团 网易 快手 腾讯 金山 360 百度 知乎 微软等大厂面试经验 一年半以前,写了个万字前端面经,最终去了字节混饭吃,因为一些业务调整的原因,我又跑路了,没写一面二面都是一轮挂的或者后 ...

  4. NodeJs 面试题 2023

    (要知道对好事的称颂过于夸大,也会招来人们的反感轻蔑和嫉妒.--培根) ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ NodeJs相关 什么是NodeJs Nodejs是一个基于V8虚拟机的Jav ...

  5. 微软、滴滴、360等前端大厂面试题

    高德 滴滴 美团 网易 快手 腾讯 金山 360 百度 知乎 微软等大厂面试经验 一年半以前,写了个万字前端面经,最终去了字节混饭吃,因为一些业务调整的原因,我又跑路了,没写一面二面都是一轮挂的或者后 ...

  6. 时隔一年半,我,一个卑微的前端菜鸡,又来写面经了

    大家好,我是若川.最近组织了源码共读活动,感兴趣的可以点此加我微信ruochuan12 进群参与,每周大家一起学习200行左右的源码,共同进步.已进行4个月了,很多小伙伴表示收获颇丰. 作者:刮涂层_ ...

  7. nodejs 多线程支持

    nodejs在v10.5.0新增了多线程的支持,并且在v11中不需要再加实验特性后缀即可直接使用. 使用起来也是非常简便,核心API就以下几个 从使用流程上来说 1.类似于cluster的多进程模式需 ...

  8. 【nodejs原理源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)

    目录 一. 引言 二.server.listen方法 三.cluster._getServer( )方法 四.跨进程通讯工具方法Utils 五.act:queryServer消息 六.轮询调度Roun ...

  9. 【nodejs原理源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)

    [摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ...

最新文章

  1. arch linux引导不启动_Linux 内核源代码的目录结构
  2. 如何在Python中删除字符串中的所有反斜杠?
  3. 朴素Paxos(Basic Paxos)算法java简易实现
  4. 【转载】实现软件架构质量属性的战术
  5. win10+tensorflow faster-RCNN 训练自己的数据集
  6. Python: try finally 与 上下文管理器简介
  7. SpringBoot | 第十四章:基于Docker的简单部署
  8. LeetCode(860)——柠檬水找零(JavaScript)
  9. troublemaker中文谐音_求Arashi 岚的Troublemaker的中文谐音~~~~ 超感激~
  10. jsp mysql论坛_体育论坛ssm,mysql)
  11. linux运行maya,Debian5.0下成功安装Maya2009!!
  12. 关于JavaScript闭包理解
  13. 我国终于有了密码法,将2020年1月1日起施行!
  14. SGX软硬件栈(零)——基本介绍
  15. funnyface表情包制作神奇
  16. Linux网络编程(三)
  17. 3dmax 毛发、毛头麻绳
  18. Golang学习+深入(十三)-goroutine/channal
  19. 分层化网络设计:核心层,汇聚层,接入层
  20. FT232RL FTDIUSB转串口芯片SSOP28 国产替代

热门文章

  1. linux下大于2TB硬盘格式化及挂载,linux下大于2T的分区方法
  2. 十九、约束作用及常见约束
  3. 实施文档_Word 2010文档处理案例教程
  4. php排除无效字查询,php删除无效的字符
  5. php smtp 超时,SMTP错误:无法连接到服务器:连接超时(110)与PHPMailer和Outlook SMTP
  6. 微信小程序分析送积分功能如何实现_微信小程序如何做出一个积分系统?
  7. 【Python】functools.wraps定义函数装饰器
  8. nginx源代码执行过程(一)
  9. 7安装ik分词器_Solr7全文检索+IK分词
  10. Java里main的写法_main方法的深入理解和例子