js封装一个websocket实现及使用详解
作者:Sven0706
这篇文章主要为大家介绍了js封装一个websocket实现示例及使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
创建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()
以上就是js封装一个websocket实现及使用详解的详细内容,更多关于js封装websocket的资料请关注脚本之家其它相关文章!