websocket封装
/** * @msg: * @param {*} * { * url: string 连接地址 * msg: JSON 首次连接成功发送的消息 * callBack: function 接收消息回调 * } * @method {*} * connect: 连接 * send: 发送消息 * close: 关闭连接 */ class SocketPlugin { constructor(param) { this.websocket = null this.isConnect = false this.timeoutNum = null this.isActivelyClose = false this.param = param } connect() { this.websocket = new WebSocket(this.param.url) this.initSocket(this.param) } /** * @msg: 监听事件 * @param {*} param * @return {*} */ initSocket(param) { this.isActivelyClose = false this.websocket.onclose = e => { this.isConnect = false if (!this.isActivelyClose) { this.reconnectSocket(param) } } this.websocket.onerror = e => { this.reconnectSocket(param) } this.websocket.onopen = () => { this.isConnect = true if (param.hasOwnProperty('msg')) { this.send(param.msg || '') } } this.websocket.onmessage = e => { param.callback(JSON.parse(e.data)) } } /** * @msg: 重连测试 * @param {*} param * @return {*} */ reconnectSocket(param) { if (this.isConnect === true) { return false } this.isConnect = true this.timeoutNum && clearTimeout(this.timeoutNum) this.timeoutNum = setTimeout(() => { this.connect(param) this.isConnect = false }, 1000) } /** * @msg: 发送消息 * @param {*} msg * @return {*} */ send(msg) { this.isConnect && this.websocket.send(JSON.stringify(msg)) } /** * @msg: 关闭连接 * @param {*} * @return {*} */ close() { this.isActivelyClose = true if (this.websocket) { this.websocket.close() } } } export default SocketPlugin
使用:
socket = new SocketPlugin({ url: 'url', msg: '', callBack:e=>{ console.log(e) } })

浙公网安备 33010602011771号