主线程就是当前运行的js文件,主线程根据你本机系统的核数来创建子进程。所有进程共享一个监听端口8000,当有请求发起时,主线程会将该请求随机分配给某个子进程。console.log(‘Worker #’ + cluster.worker.id + ‘ make a response’);这句代码可以打印出是哪个进程处理该请求。

    1. const { cpus } = require("os")
    2. const cluster = require("cluster")
    3. let cpuNum = cpus().length
    4. const http = require("http")
    5. let worker;
    6. if (cluster.isMaster) {
    7. console.log(`主进程${process.pid}正在运行`)
    8. //衍生工作进程
    9. for (let i = 0; i < cpuNum; i++) {
    10. worker= cluster.fork()
    11. worker.send("ahha")//父往子传参
    12. worker.on("message",data=>{ //子进程传过来的数据
    13. console.log(data)
    14. })
    15. }
    16. cluster.on('listening', function (worker, address) {
    17. console.log('listening: worker' + worker.id + ',pid:' + worker.process.pid + ', Address:' + address.address + ":" + address.port);
    18. });
    19. cluster.on("exit",(worker,code,signal)=>{
    20. console.log(`工作进程${worker.process.pid}已退出`)
    21. // cluster.fork()
    22. })
    23. }else{
    24. //工作进程可以共享任何TCP连接
    25. //共享的是HTTP服务器
    26. http.createServer((req,res)=>{
    27. res.writeHead(200);
    28. res.end("你好世界\n")
    29. }).listen(8080)
    30. process.on("message",data=>{//父进程传过来的数据
    31. console.log(data)
    32. })
    33. process.send("ahha") //子进程往父进程传参
    34. //console.log(`工作进程${process.pid}已启动`)
    35. }