socket

92 阅读1分钟
let socket;
let wsUrl='ws://localhost:8080/webSocket'
let lockReconnect = false // 连接失败不进行重连
let maxReconnect = 5 // 最大重连次数,若连接失败
const webSocket = {
    /**
     * 初始化webSocket
     */
    initWebSocket(){
        try {
            if ('WebSocket' in window) {
                socket = new WebSocket(wsUrl)
            } else {
                console.log('您的浏览器不支持websocket')
            }
            socket.onopen = this.onOpen
            socket.onerror = this.onError
            socket.onmessage = this.onMessage
            socket.onclose = this.onClose
        } catch (e) {
            webSocket.reconnect()
        }
    },
    /**
     * 连接成功
     */
    onOpen(){
        console.log('socket连接成功')
        lockReconnect = true
    },
    /**
     * socket上行数据
     */
    onMessage(e){
        const data = JSON.parse(e.data)
        console.log('socketMsg',data)
    },
    /**
     * socket错误回调
     */
    onError(){
        console.log('socket发生一个错误')
        lockReconnect = true
    },
    /**
     * socket连接关闭回调
     */
    onClose(){
        console.log('socket连接关闭')
    },
    /**
     * socket发送数据
     */
    send(data) {
        socket.send(JSON.stringify(data))
    },
    /**
     * 断开socket
     */
    close(){
        socket.close()
        lockReconnect = false
    },
    /**
     * 重新连接
     */
    reconnect() {
        console.log('尝试重连:' + maxReconnect)
        if (lockReconnect || maxReconnect <= 0) {
            return
        }
        setTimeout(() => {
            maxReconnect--
            webSocket.initWebSocket()
        }, 60 * 1000)
    },
}
export default {socket,webSocket}