如上图,Client 本身只干了一件事情,那就是创建所有 pm2 所需的文件和文件夹,后面的内容都是在 Client 原型上添加的一些方法,我们重点看一下Client.prototype.launchDaemon:
可以看到它就是利用 child_process 创建了一个 Daemon 子进程
再回过头来看看_startJson中Client做了什么事情:
然后顺着Client.prototype.executeRemote ---> Client.prototype.start ---> Client.prototype.pingDaemon ----> Client.prototype.launchDaemon ---> Client.prototype.launchRPC依次查看发现它启动了一个Daemon进程
还有一个重点就是var req = axon.socket('req');this.client = new rpc.Client(req);也就是创建了一个rpcClient连接到了Daemon进程,那么这里的this.client就相当于Daemon实例,那么rpc是什么意思呢?rpc就是指调用另一个进程或者服务器上的函数,再回到_startJson:
沿着这个方法调用查看最终是调用了this.client: