websocket实现消息推送通知

在vue中,websocket实现消息推送通知

data() {
   return {
            websocket: null,
            timeout: 30 * 1000, //30秒一次心跳
            timeoutObj: null, //心跳倒计时
            serverTimeoutObj: null, //心跳倒计时
            timeoutnum: null, //断开 重连倒计时
   }
}
  1. 初始化websocket对象
 initWebSocket() {
   let url = "wss://你与后端规定好的通信地址";
   this.websocket = new WebSocket('你与后端规定好的通信地址');
    // 连接错误的回调
     this.websocket.onerror = (error) => {
           console.error("WebSocket error:", error);
           // 若连接失败,发起重新连接
            this.reconnect();
        };
  // 连接成功
    this.websocket.onopen = () => {
          console.log("WebSocket连接已建立");
          //发送心跳测试,让后端知道浏览器WebSocket通信没有断开
           this.reset().start();
      };
    // 收到消息的回调,前端编写的消息推送等功能主要在这里实现
     this.websocket.onmessage = this.setOnmessageMessage;
   // 连接关闭的回调
      this.websocket.onclose = () => {
              // 若监听到WebSocket通信关闭,则又重新连接
              this.reconnect()
              console.log("WebSocket连接已关闭");
        };
      // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
       window.onbeforeunload = () => {
             this.websocket.close()
        }
 }
  1. 在初始化中使用到的方法
// 通信断开,重连的方法
setOnmessageMessage(event) {
            const message = event.data;
            // pong后端返回,发起心跳
            if (message && message == "pong") {
                this.reset().start()
            }else {
            //refresh后端返回,逻辑处理
              if(message && message == 'refresh') {
                 
              }
            }
            console.log("Received message:", message);
          },
reconnect() {
            if (this.lockReconnect) return;
            this.lockReconnect = true;
            //没连接上会一直重连,设置延迟避免请求过多
            this.timeoutnum && clearTimeout(this.timeoutnum);
            this.timeoutnum = setTimeout(() => {
              //新连接
              this.initWebSocket();
              this.lockReconnect = false;
            }, 5000);
    },
    
     // 重置心跳,先清除以前的定时
reset() {
            // 清除时间
            clearTimeout(this.timeoutObj);
            clearTimeout(this.serverTimeoutObj);
            return this
},

// 开启心跳,用于和后端建立通信时,互相知道对方是否有断开
start() {
            this.timeoutObj && clearTimeout(this.timeoutObj);
            this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
            this.timeoutObj = setTimeout(() => {
              // 这里发送一个心跳,后端收到后,返回一个心跳消息,ping这个自定义,和后端商量,
              this.websocket.send("ping");
              console.log("发送心跳检测");
              this.serverTimeoutObj = setTimeout(() => {
              // 超时,前端自动断开连接,又重新发起链接请求
                console.log("未收到心跳检测回复");
                this.websocket.close()
              }, this.timeout)
            }, this.timeout);
   },
  1. 调用初始化websocket对象的方法
mounted() {
       // 建立WebSocket消息通道
          this.initWebSocket();
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot WebSocket可以实现消息推送和聊天室功能。通过使用Spring框架提供的WebSocket技术,可以轻松实现这些功能。具体的实现步骤可以参考Spring官方的教程,其中详细介绍了如何使用Spring实现WebSocket,包括建立连接、发送消息和接收消息等操作。 WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许服务器主动推送消息给客户端,而不需要客户端发送请求。这种实时推送的机制非常适合用于聊天消息推送功能。通过SpringBoot WebSocket,可以在服务器端处理聊天消息,然后将消息即时推送给客户端,实现实时聊天的功能。 在实现SpringBoot WebSocket聊天消息推送的过程中,可以通过建立连接、发送消息和接收消息等操作来完成消息的传递。建立连接时,客户端会向服务器发起WebSocket握手请求,服务器接收请求后进行握手处理,建立连接。建立连接后,客户端和服务器之间可以互相发送和接收消息实现聊天功能。服务器可以根据业务逻辑处理接收到的消息,并将消息推送给其他客户端。客户端接收到消息后可以进行展示或处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot+WebSocket实现消息推送及简单的聊天功能](https://download.csdn.net/download/typ1805/10730574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [springBoot集成websocket实现消息实时推送提醒](https://blog.csdn.net/weixin_35815479/article/details/128027542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Springboot整合Websocket(推送消息通知)](https://blog.csdn.net/qq_34709784/article/details/126391781)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值