vue中封装webSocket~心跳、断线重连等机制~

说明

此教程针对typescript,提供断线自动重连,断线数据重发,自动心跳,自定义消息发送机制

安装

安装tools-vue3工具库,此仓库提供了http请求、文件请求、websocket、signalr、cookie的功能

pnpm i tools-vue3

使用示例

    创建 WSUtil.ts文件 内容:
import { WebSocketBean } from tools-vue3
export default class WSUtil {
    static ws: WebSocketBean
    static async init() {
        const sendSuffix = 
        
        //初始化websokcet对象
        this.ws = new WebSocketBean({
            url: ws://192.168.1.66:8801/ws,
            needReconnect: true,
            reconnectGapTime: 3000,
            onerror: () => {
                console.log(断开)
            },
            sendSuffix,
            messageSuffix: sendSuffix,
            heartSend: ~,
            heartGet: ~,
            heartGapTime: 3000,
            onmessage: (data) => {
            	//在这里写消息处理逻辑
                console.log(data.data)
                const sp = data.data.split(sendSuffix).filter((el: string) => el.length > 0)
                console.log(sp)
            }
        })
        //建立连接
        this.ws.start()
    }
}
    发送数据
WSUtil.ws.send(data)
    主动断开
WSUtil.ws.dispose()
    消息处理

对消息处理一般使用事件总线去做,使用tool-javascript仓库中提供的CEvent.on和CEvent.emit去做即可

//在WSUtil.ts的onmessage方法中
onmessage: (data) => { 
    //在这里写消息处理逻辑 
    console.log(data.data) 
    const sp = data.data.split(sendSuffix).filter((el: string) => el.length > 0) 
    console.log(sp) 
    //这里sp的数据为[{"code":"getData","data":"test"}]
    sp.forEach(item=>{
        const jsonData = JSON.parse(item)
        //事件触发
        CEvent.emit(jsonData.code,jsonData.data)
    })
}


//在任意文件或者页面中
CEvent.on("getData",(data)=>{
    //在onmessage触发后,这里应该打印test字符串
    console.log(data)
})
经验分享 程序员 微信小程序 职场和发展