如何使用websocket实现云端和前端的日志同步背景:首先,在使用云构建平台时,它会通过前端实时告诉你云端运行的参考构建日志。那么这个实时同步怎么实现呢,当然是websocket,就拿我目前实现的服务端nodejs来说1节点端websocket实现varWebSocket=require("ws");//建立一个websocketconnectionasyncconnectSocket(){const{SET_WS,WATCH_CONFIG}=appconstthis_=thistry{constwss=newWebSocket.Server({port:8112});wss.on("connection",ws=>{ws.on('message',(message,req)=>{if(message=='start'){//这里可以设置ws为全局变量,andfollow-uptimingclose()//这里可以使用nodewatch将ws中内置的内容写入到server文件中并开始逐行同步到前端的监控,其中logPath为构建日志配置存放目录const{WATCH}=WATCH_CONFIG(logPath)WATCH(ws)}elseif(message=='close'){ws?.terminate()}});});wss.on('error',(e)=>{this.logger.info('error',e);})wss.on('message',(str)=>{this.logger.info('onmessage-----',str)})wss.on('close',(code,message)=>{this.logger.info('ws_close',code,message);});}catch(error){this.logger.info('ws_close',`${error}`);}}2节点端监控文件的实现constWATCH_CONFIG=(filePath)=>{console.log('----------------',filePath)constWATCH=(ws)=>{//先输出当前所有日志fs.readFile(filePath,'utf-8',function(err,data){if(err){ws.send('Readerror:',err)}else{ws.send(data)}});fs.watch(filePath,(eventType,file)=>{if(file&&eventType==="change"){fs.readFile(filePath,'utf-8',function(err,data){if(err){ws.send('读取错误:',err)}else{ws.send(data)}});}})}constCLEAR=()=>{fs.写文件(文件路径,'',()=>{console.log('Clearsteplogcompleted'+filePath)})}return{WATCH,CLEAR}}3前端实现constsyncLogs=()=>{constconnectCallback=()=>{ws=newWebSocket('ws://xxx.com:8112');ws.onopen=function(e){console.log('连接服务器成功',ws);//向服务器发送消息,服务器可以根据这个开始识别身份ws.send('start');};ws.onclose=function(e){console.log('服务器关闭',e);};ws.onerror=function(e){console.log('连接错误',e);message.error('服务器连接错误,请点击重新获取日志');ws=空;};//从服务器接收消息ws.onmessage=function(message){console.log('.......',message);//这里只是尝试通过react将容器中的消息显示出来};};如果(ws){connectCallback();}else{dispatch('重新建立链接')}};
