Vue中使用及封装websocket示例详解
作者:牛奔
这篇文章主要为大家介绍了Vue中使用及封装websocket示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
简单例子
<template> <div class="test"> </div> </template> <script> export default { name : 'test', data() { return { websock: null, } }, created() { this.initWebSocket(); }, destroyed() { this.websock.close() //离开路由之后断开websocket连接 }, methods: { initWebSocket(){ //初始化weosocket const wsuri = "ws://127.0.0.1:8080"; this.websock = new WebSocket(wsuri); this.websock.onmessage = this.websocketonmessage; this.websock.onopen = this.websocketonopen; this.websock.onerror = this.websocketonerror; this.websock.onclose = this.websocketclose; }, websocketonopen(){ //连接建立之后执行send方法发送数据 let actions = {"test":"12345"}; this.websocketsend(JSON.stringify(actions)); }, websocketonerror(){//连接建立失败重连 this.initWebSocket(); }, websocketonmessage(e){ //数据接收 const redata = JSON.parse(e.data); }, websocketsend(Data){//数据发送 this.websock.send(Data); }, websocketclose(e){ //关闭 console.log('断开连接',e); }, }, } </script> <style lang='less'> </style>
封装后
创建websocket.js
let Socket = '' let setIntervalWesocketPush = null /** * 建立websocket连接 * @param {string} url ws地址 */ export const createSocket = url => { Socket && Socket.close() if (!Socket) { console.log('建立websocket连接') Socket = new WebSocket(url) Socket.onopen = onopenWS Socket.onmessage = onmessageWS Socket.onerror = onerrorWS Socket.onclose = oncloseWS } else { console.log('websocket已连接') } } /**打开WS之后发送心跳 */ const onopenWS = () => { sendPing() } /**连接失败重连 */ const onerrorWS = () => { Socket.close() clearInterval(setIntervalWesocketPush) console.log('连接失败重连中') if (Socket.readyState !== 3) { Socket = null createSocket() } } /**WS数据接收统一处理 */ const onmessageWS = e => { window.dispatchEvent(new CustomEvent('onmessageWS', { detail: { data: e.data } })) } /** * 发送数据但连接未建立时进行处理等待重发 * @param {any} message 需要发送的数据 */ const connecting = message => { setTimeout(() => { if (Socket.readyState === 0) { connecting(message) } else { Socket.send(JSON.stringify(message)) } }, 1000) } /** * 发送数据 * @param {any} message 需要发送的数据 */ export const sendWSPush = message => { if (Socket !== null && Socket.readyState === 3) { Socket.close() createSocket() } else if (Socket.readyState === 1) { Socket.send(JSON.stringify(message)) } else if (Socket.readyState === 0) { connecting(message) } } /**断开重连 */ const oncloseWS = () => { clearInterval(setIntervalWesocketPush) console.log('websocket已断开....正在尝试重连') if (Socket.readyState !== 2) { Socket = null createSocket() } } /**发送心跳 * @param {number} time 心跳间隔毫秒 默认5000 * @param {string} ping 心跳名称 默认字符串ping */ export const sendPing = (time = 5000, ping = 'ping') => { clearInterval(setIntervalWesocketPush) Socket.send(ping) setIntervalWesocketPush = setInterval(() => { Socket.send(ping) }, time) }
下载 (也可复制源码,放在本地,使用方式相同)
npm install @sven0706/websocket -S
使用
// 在main.js或需要使用的地方引入并建立连接 import { createSocket } from '@sven0706/websocket' createSocket('wss://api.baidu.com') // 发送消息 import { sendWSPush } from '@sven0706/websocket' sendWSPush(data) // 接收消息 const getsocketData = e => { // 创建接收消息函数 const data = e && e.detail.data console.log(data) } // 注册监听事件 window.addEventListener('onmessageWS', getsocketData) // 在需要的时候卸载监听事件,比如离开页面 window.removeEventListener('onmessageWS', getsocketData)
API
仅三个api, 且一般只需要用到`createSocket`, `sendWSPush`
/** * 建立websocket连接 * @param {string} url ws地址 */ createSocket(url) /** * 发送数据 * @param {any} message 需要发送的数据 */ sendWSPush(message) /**发送心跳 * @param {number} time 心跳间隔毫秒 默认5000 * @param {string} ping 心跳名称 默认字符串ping */ sendPing()
巨人的肩膀
以上就是Vue中使用及封装websocket示例详解的详细内容,更多关于Vue封装websocket的资料请关注脚本之家其它相关文章!