当前位置: 首页 > 后端技术 > Node.js

使用node.js创建子进程,使用WebSocket和Node原生支持实现IPC(Inter-ProcessCommunication)

时间:2023-04-03 10:20:01 Node.js

最近几个月,笔者得知他们的WiFi测试平台项目已经被某公司人工测试,于是在老师的提议下,决定使用puppeteer来自动化爬取和修改页面数据。实现过程中发现--路由管理页面--登录后只进行cookie加密,页面的数据和操作传递不同的参数到同一个接口,所以通过promise可以快速实现以上功能-请求方法。本文主要记录和总结:node.js子进程的创建:node.js:child_process(官方文档)fork和spawn的区别和联系Node原生支持实现进程间通信WebSocket实现进程间通信1.node.js子进程创建节点创建子进程的方法可以参考上面的官??方文档,里面有详细的配置和说明。在这篇文章中,作者重点介绍了作者使用的child_process.spawn()方法和child_process.fork()方法。child_process.spawn()方法:Master进程代码:constchild_process=require('child_process');//引入child_process模块??const{recLog}=require("./utils/log");//由于执行父进程,子进程无法在控制台打印信息,所以封装了log4js方法。constgChildProcessNumber=3;//创建的子进程数-globalcreatProcess();异步函数creatProcess(){for(leti=0;i{recLog(`Parentprocessreceivedmessage-state:${Info.state}`)workerProcess.send({command:'init'});})}}Child流程代码:const{recLog}=require("./utils/log");process.send({state:'action'});recLog(`subprocess${process.pid}发送操作请求。`)process.on("message",async(mess)=>{recLog(`childprocess${process.pid}receivedmessage-command:${mess.command}`)})节点原生支持通信结果:4.WebSocket实现进程间通信Master进程代码:constchild_process=require('child_process');constws=require('nodejs-websocket')const{recLog}=require("./utils/log");constgChildProcessNumber=3;creatProcess();functionOpenWebSocketServer(port){ws.createServer((conn)=>{conn.on('text',(data)=>{//接收客户端数据的回调方法recLog(`父进程收到子进程的消息:${data}`);switch(data){case'connected':recLog('进程间通信链接建立成功!')conn.sendText('init')break;默认:recLog(`Parentreceivedundefinedinterprocessmessage:${data}!`)break;}})conn.on('connection',(connection)=>{recLog(connection)})conn.on('close',(e)=>{//关闭服务器的回调方法recLog(`${e}Serviceconnectionclose`)})conn.on('error',(e)=>{//服务器连接异常回调方法recLog(`${e}serverexception`)})}).listen(port)//监听8181端口,对应客户端连接端口recLog(`${port}端口,服务端已经开启`)}asyncfunctioncreatProcess(){for(leti=0;i