websocket使用教程

websocket连接函数

实现思路:封装一个连接函数,为后面重连实现复用,并实现连接错误等其他连接错误情况,返回一个Promise,在promise中实现连接后的情况,代码如下:

function reconnect() {
    return new Promise((resolve, reject) => {
        console.log("重连Ing....");
        if (socket && socket.readyState !== WebSocket.CLOSED) {
            socket.close();
        }
        socket = new WebSocket("ws://localhost:8080");
        socket.binaryType = 'USVString';
        socket.addEventListener("open", function (event) {
            console.log("WebSocket connection reopened.");
            resolve(socket); 
        });

        socket.addEventListener("error", function (event) {
            console.error("WebSocket error during reconnection:", event);
            reject(event);  
        });

        socket.addEventListener("close", function (event) {
            console.log("WebSocket connection closed during reconnection attempt.");
            reject(event); 
        });
        socket.onmessage = function (event) { 
          //消息监听
        }
    });
}

再写一个方法用来拿到连接webSocket之后的结果,并实现连接失败时重新发送连接请求,每次请求时间实现递增的效果

var socket; //连接实例,导出这个socket供外部使用
var time = 1000; //默认1s时间
function connnent(){
    reconnect().then((conn) => {
        console.log("Reconnected successfully!", conn);
        socket = conn;
    }).catch((error) => {
        console.error("Failed to reconnect:", error);
        // 处理重连失败后的逻辑
        setTimeout(connnent,time+=1000);
    });
}

实现心跳机制函数,检测socket是否存活

var heartbeat = setInterval(function(){
    socket.send("heart");
    //重连
    if(socket.readyState != 1){
      connnent()
    }
},30000);

关闭scoket连接

function closeWebSocket(){
    socket.close();
    clearInterval(heartbeat);//消除心跳
}

简易版服务端代码示例

通过广播发送接受到的消息

WebSocketServer.on('connection',function connection(ws){
  cilent.add(ws);
  ws.on('message',function incoming(message){
    console.log('received: %s',message)
    cilent.forEach(item=>{
      if (item !== ws && item.readyState === WebSocket.OPEN) {
        item.send(String(message));
      }
    })
  })
})

实现一个聊天对话框效果

实现断线重连状态:控制台显示报错信息,重复请求时间这里可以优化一下,避免发送过多的无用请求,本次请求是在每次请求之后增加一秒,避免重复调用
在这里插入图片描述
启动后端websocket服务,成功显示连接正常信息,并且不会发送多余请求,心跳连接机制正常发送
在这里插入图片描述
测试功能:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值