const _WEBSOCKET = { //是否打开连接 isOpen: false, //连接socket. https://ask.dcloud.net.cn/question/74505 connectSocket(url, recvMsgFunc = null, successFunc = null, errorFunc = null) { try { let that = this //监听socket连接 uni.onSocketOpen((res) => { // console.log('WebSocket连接已打开!', url, res) that.isOpen = true successFunc && successFunc(res) }) //监听socket连接失败 uni.onSocketError((res) => { that.isOpen = false console.log('WebSocket连接打开失败,请检查!', url, res) errorFunc && errorFunc(res) }) //监听收到消息 uni.onSocketMessage((res) => { // console.log('收到服务器内容:' + res.data, url) //可结合服务端@OnOpen返回消息OK来进行判断是否已经打开连接 if (res.data === 'OK') { // console.log('WebSocket连接已打开!', url, res) that.isOpen = true successFunc && successFunc(res) return } recvMsgFunc && recvMsgFunc(res.data) }) //监听socket关闭 uni.onSocketClose((res) => { // console.log('WebSocket 已关闭!', url) that.isOpen = false }) //连接socket setTimeout(() => { // 防止还没监听到onSocketOpen就已经完成连接 uni.connectSocket({ url, success() { if (that.isOpen) { // console.log('Websocket连接已打开,刷新状态完成!', url) } else { // console.log('Websocket初始化成功!正在监听连接打开状态...', url) } } }) }, 100) } catch (error) { console.log('err:' + error) } }, //发送消息 sendMessage(msg = '', successFunc = null, errorFunc = null) { if (!msg) { // console.log('未传消息!') errorFunc && errorFunc('未传消息!') return } if (!this.isOpen) { // console.log('连接未打开!') errorFunc && errorFunc('连接未打开!') return } uni.sendSocketMessage({ data: msg, success(res) { // console.log('消息发送成功!', msg) successFunc && successFunc(res) }, fail(err) { console.log('消息发送失败!', msg) errorFunc && errorFunc(err) } }) }, //关闭连接 closeSocket() { if (!this.isOpen) { return } //关闭socket连接 uni.closeSocket() } } export default _WEBSOCKET