h5 websocket 断开重新连接
最近的项目中使用ws 长连接来接收和发送消息, 直接上代码
import * as SockJS from "sockjs-client";
import Stomp from "stompjs";
connection() {
      if (this.clientSubscribe) {
        console.log('unsubscribe')
        this.clientSubscribe.unsubscribe()
      }
      const token = "";
      // const TENANT_ID = getStore({name: 'tenantId'}) ? getStore({name: 'tenantId'}) : '1'
      const headers = {
        Authorization: "Bearer " + token,
        chatSessionId: this.chatBaseInfo.chatSessionId,
        tempToken: this.chatBaseInfo.tempToken,
      };
      // 建立连接对象
      this.socket = new SockJS("/bot/ws"); // 连接服务端提供的通信接口,连接以后才可以订阅广播消息和个人消息
      //获取STOMP子协议的客户端对象
      this.stompClient = Stomp.over(this.socket);
      //this.stompClient.debug = true
      //向服务器发起websocket连接
      this.stompClient.connect(
        headers,
        () => {
          this.isConnection = false
          this.successCallback()
        },
        () => {
          console.log('断开重新连接')
          this.isConnection = true
          console.log( this.stompClient)
          if (this.env === "WEB") {
            setTimeout(() => {
              this.connection()
            },2000)
          }
          //this.reconnect(this.successCallback);
        }
      );
    },
successCallback(){
      this.clientSubscribe = this.stompClient.subscribe(
            "/x99/receive/" + this.chatBaseInfo.chatSessionId,
            (msg) => {
              // 订阅服务端提供的某个topic;
              // 处理接收的数据
            }
          );
    },
遇到的问题是 在ios手机端 锁屏的情况下 会把websocket 断开 解决的方案是
mounted() {
    document.addEventListener('visibilitychange', () => {
      if (!document.hidden) {//页面呼出
        if (this.stompClient&&!this.stompClient.connected) {
          this.connection()
        }
      }
    })
  },
注意 1.在web 端是没有这个事件的 所以在重新连接的地方加了判断 是web 端用了定时器去冲新连接
2.在重新连接前需要判断之前的订阅是不是存在 存在的话先取消订阅,
h5 websocket 断开重新连接的更多相关文章
- WebSocket断开原因、心跳机制防止自动断开连接
		
1.断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来. ws.onclose = function (e) { console.log('websocket ...
 - JS中使用reconnecting-websocket实现websocket断开自动重新连接
		
这里用了第三方的js 官方地址:https://github.com/joewalnes/reconnecting-websocket 引入js reconnecting-websocket.min. ...
 - H5 WebSocket 如何和C#进行通信
		
HTML5作为下一代的 Web 标准, 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等.WebSocket 在浏览器和服务器之间提供了一个基于 TCP 连 ...
 - Node + H5 + WebSocket + Koa2 实现简单的多人聊天
		
服务器代码 ( 依赖于 koa2, koa-websocket ) /* 实例化外部依赖 */ let Koa = require("koa2"); let WebSocket ...
 - h5:WebSocket
		
实时 Web 应用的窘境 Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特 ...
 - 初探和实现websocket心跳重连
		
心跳重连缘由 在使用websocket过程中,可能会出现网络断开的情况,比如信号不好,或者网络临时性关闭,这时候websocket的连接已经断开, 而浏览器不会执行websocket 的 onclos ...
 - 接入WebSocket记录
		
为什么用 WebSocket 因为APP里面有个聊天功能,需要服务器主动推数据到APP.HTTP 通信方式只能由客户端主动拉取,服务器不能主动推给客户端,如果有实时的消息,要立刻通知客户端就麻烦了,要 ...
 - 接入WebSocket
		
闲扯 WebSocket 以前没用过,之前写过一篇博客是基于原生socket的(查看)比较复杂,慎入.今天另外一个APP需要接websocket了,然后便找到了facebook的 SocketRock ...
 - JavaScript是如何工作: 深入探索WebSocket和HTTP/2与SSE + 如何选择正确的路径!
		
原文:<JavaScript是如何工作: 深入探索 websocket 和HTTP/2与SSE +如何选择正确的路径! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 文章底部分 ...
 
随机推荐
- C++ Protobuf
			
Protobuf protobuf (protocol buffer) 是谷歌内部的混合语言数据标准.通过将结构化的数据进行序列化(串行化),用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的 ...
 - Util和Helper类
			
Util和Helper Util Util类,应该是一个无状态的类,只有静态方法. 比如在获取某些类的全局实例化对象的时候可以使用. public class ParamUtil { ... publ ...
 - Linux的NIS配置
			
快速命令 # Server和Client设置NIS域名 nisdomainname nis_server echo 'NISDOMAIN=nis_server' >> /etc/sysco ...
 - django_day08_项目相关
			
django_day08_项目相关 定义数据库表 from django.db import models # Create your models here. class User(models.M ...
 - IDEA整合Docker
			
创建项目 1.使用 IDEA 构建一个 SpringBoot 项目 2.编写一个helloController @RestController public class HelloController ...
 - KingbaseES R6 集群修改物理IP和VIP案例
			
在用户的实际环境里,可能有时需要修改主机的IP,这就涉及到集群的配置修改.以下以例子的方式,介绍下KingbaseES R6集群如何修改IP. 一.案例测试环境 操作系统: [KINGBASE@nod ...
 - ViewBinding 与 Kotlin 委托双剑合璧
			
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭 ...
 - 使用J2EE 登录实例开发
			
我们先了解下Servlet的生命周期 Servlet部署在容器里,其生命周期由容器管理. 概括为以下几个阶段: 1)容器加载Servlet类. 当第一次有Web客户请求Servlet服务或当Web服务 ...
 - parted创建磁盘分区并创建LVM(Linux合并多块大于2T的磁盘并合并到一个分区)
			
文章转载自:https://blog.csdn.net/likemebee/article/details/85630808
 - 安装MySQL8 工具集
			
下载地址:https://downloads.mysql.com/archives/utilities/ # wget https://downloads.mysql.com/archives/get ...