当前位置: 首页 > Web前端 > vue.js

[vue]自定义一个websocket工具函数

时间:2023-03-31 18:31:51 vue.js

记下最近项目中用到的一个websocket工具函数(实际应用场景是医院下的排队叫号系统需要使用websocket连接,回调函数按需定制处理)。使用步骤大致如下:Project在根路径下新建一个websocket.js文件,文件内容如下letws=nulllet_data=nulllet_url=nulllet_callback=nulllethearBeatTimer=nullletreconnectTimer=nullletreconnectNum=0//重连次数consttime=3000//心跳间隔constreconnectTime=5000//重连超时exportfunctionwebSocket(url='',data='',callback=()=>{}){//initialization_url=url//address_data=data//发送消息_callback=callback//回调函数,使用闭包createWebSocket()//创建webSocket}exportfunctiongetWebSocket(){returnws}exportfunctioncloseWebSocket(){console.log('closeWebSocket')如果(ws){ws。onerror=()=>{}ws.onclose=()=>{}ws.close()}ws=null_data=null_url=null_callback=()=>{}//timeoutTimer=nullhearBeatTimer=nullreconnectTimer=null}functioncreateWebSocket(){console.log('CreateWebSocket')if(!_url)returnif(ws){ws.close()ws=null}ws=newWebSocket(_url)ws.onopen=function(){sendMessage()heartBeat()}ws.onmessage=function(e){console.log('消息事件:',e)//clearTimeout(timeoutTimer)if(typeof_callback==='function'){_callback(e)}reconnectNum=0heartBeat()}ws.onerror=function(){reconnect()}ws.onclose=function(){reconnect()}}functionheartBeat(){if(hearBeatTimer){clearTimeout(hearBeatTimer)}hearBeatTimer=setTimeout(()=>{if(ws&&ws.readyState===1){//如果连接正常sendMessage()//setTimeoutTimer()}else{reconnect()}},time)}functionsendMessage(){console.log('发送消息:',_data)if(!ws)returnswitch(Object.prototype.toString.call(_data)){case'[objectObject]':ws.send(JSON.stringify(_data))breakcase'[objectString]':ws.send(_data)}}functionreconnect(){if(reconnectTimer){clearTimeout(reconnectTimer)}reconnectTimer=setTimeout(()=>{reconnectNum++console.log('重连WebSocket')console.log('重连times:',reconnectNum)webSocket(_url,_data,_callback)},reconnectTime)}window.onbeforeunload=()=>{closeWebSocket()}2.从'./websocket.js'export中引用并初始化websocketimport{webSocket}default{created(){this.init()},methods:{init(){this.onWebSocket()},//打开套接字onWebSocket(){//模拟地址consturl='wss://www.baidu.com?uuid='//心跳包发送内容constdata={to:-1,text:'ping',//内容}console.log('data',data)webSocket(url,data,this.handleWSCallBack)},//处理套接字回调handleWSCallBack(data){//console.log('data',e.data)//dosomething}}}其余的函数,你可以根据需要调整这个回调的备注parameter:上面CODE的部分内容,感谢下面的同学A元的帮助,还有他下面的某金账号,有兴趣的可以关注一下(有点干商品)

最新推荐
猜你喜欢