vue使用websocket及封装过程
更新时间:2023年10月23日 08:36:53 作者:姥姥家的饭
这篇文章主要介绍了vue使用websocket及封装过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
vue使用websocket及封装
创建websocket.js
const WSS_URL = `wss://wss.xxxx.com/ws?appid=xxx` let Socket = '' let setIntervalWesocketPush = null // 建立连接 export function createSocket() { if (!Socket) { console.log('建立websocket连接') Socket = new WebSocket(WSS_URL) Socket.onopen = onopenWS Socket.onmessage = onmessageWS Socket.onerror = onerrorWS Socket.onclose = oncloseWS } else { console.log('websocket已连接') } } // 打开WS之后发送心跳 export function onopenWS() { sendPing() //发送心跳 } // 连接失败重连 export function onerrorWS() { clearInterval(setIntervalWesocketPush) Socket.close() createSocket() //重连 } // WS数据接收统一处理 export function onmessageWS(e) { window.dispatchEvent(new CustomEvent('onmessageWS', { detail: { data: e } })) } /**发送数据 1. @param eventType */ export function sendWSPush(eventTypeArr) { const obj = { appId: 'airShip', cover: 0, event: eventTypeArr } if (Socket !== null && Socket.readyState === 3) { Socket.close() createSocket() //重连 } else if (Socket.readyState === 1) { Socket.send(JSON.stringify(obj)) } else if (Socket.readyState === 0) { setTimeout(() => { Socket.send(JSON.stringify(obj)) }, 3000) } } /**关闭WS */ export function oncloseWS() { clearInterval(setIntervalWesocketPush) console.log('websocket已断开') } /**发送心跳 */ export function sendPing() { Socket.send('ping') setIntervalWesocketPush = setInterval(() => { Socket.send('ping') }, 5000) }
组件中调用
import { createSocket, sendWSPush } from './api/websocket' createSocket() //创建 sendWSPush(11111) //发送数据 // 事件监听 如果websockte有反应触发"this.getDataFunc"方法 window.addEventListener('onmessageWS', this.getDataFunc) //根据需要,销毁事件监听(不然会创建多个监听事件,发一次通告提示好几次) window.removeEventListener('onmessageWS', this.getDataFunc) methods: { getDataFunc(e) { console.log(e) } }
vue使用WebSocket连接
在store里面新建ws.js文件
export default { state: { webst: null, WSMessage: null, WSStatus: null }, mutations: { /** * @description 建立websocket连接 * @param state vuex state * @param webst webSocket对象 */ setConnect (state, webst) { state.webst = webst }, /** * @description websocket消息 * @param state vuex state * @param message webSocket消息 */ setMessage (state, message) { state.WSMessage = message }, /** * @description 设置websocet的状态 * @param state vuex state * @param message webSocket消息 */ setWSStatus (state, status) { state.WSStatus = status } }, actions: { /** * @description 开启websocket连接 */ connect ({ state, commit, dispatch, rootState }, { token }) { return new Promise((resolve, reject) => { const wsurl = 'websocket连接地址' const webs = new WebSocket(wsurl) // 客户端接收服务端数据时触发 webs.onmessage = (e) => { commit('setWSStatus', 'success') commit('setMessage', e.data) // 进行操作... } // 建立连接时触发 webs.onopen = (e) => { commit('setWSStatus', 'open') } // 通信发生错误时触发 webs.onerror = (e) => { state.webst.close() commit('setWSStatus', 'error') } // 连接关闭时触发 webs.onclose = (e) => { commit('setWSStatus', 'closed') } resolve(webs) }) }, /** * @description 关闭websocket */ close ({ state, commit, dispatch, rootState }) { if (state.webst) { state.webst.close() commit('setWSStatus', 'closed') commit('setMessage', null) commit('setConnect', null) } } } }
登录时和退出时调用
// 登录 dispatch('connect', null, { root: true }) // 退出登录 dispatch('close', null, { root: true })
展示效果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
uni-liveShow是一个基于vue+uni-app技术开发的集小视频/IM聊天/直播等功能于一体的微直播项目。本文通过实例图文的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧2019-11-11
最新评论