最近的项目中使用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.在重新连接前需要判断之前的订阅是不是存在  存在的话先取消订阅,

  if (this.clientSubscribe) {
          this.clientSubscribe.unsubscribe()
       }

h5 websocket 断开重新连接的更多相关文章

  1. WebSocket断开原因、心跳机制防止自动断开连接

    1.断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来. ws.onclose = function (e) { console.log('websocket ...

  2. JS中使用reconnecting-websocket实现websocket断开自动重新连接

    这里用了第三方的js 官方地址:https://github.com/joewalnes/reconnecting-websocket 引入js reconnecting-websocket.min. ...

  3. H5 WebSocket 如何和C#进行通信

    HTML5作为下一代的 Web 标准, 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等.WebSocket 在浏览器和服务器之间提供了一个基于 TCP 连 ...

  4. Node + H5 + WebSocket + Koa2 实现简单的多人聊天

    服务器代码  ( 依赖于 koa2,  koa-websocket ) /* 实例化外部依赖 */ let Koa = require("koa2"); let WebSocket ...

  5. h5:WebSocket

    实时 Web 应用的窘境 Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特 ...

  6. 初探和实现websocket心跳重连

    心跳重连缘由 在使用websocket过程中,可能会出现网络断开的情况,比如信号不好,或者网络临时性关闭,这时候websocket的连接已经断开, 而浏览器不会执行websocket 的 onclos ...

  7. 接入WebSocket记录

    为什么用 WebSocket 因为APP里面有个聊天功能,需要服务器主动推数据到APP.HTTP 通信方式只能由客户端主动拉取,服务器不能主动推给客户端,如果有实时的消息,要立刻通知客户端就麻烦了,要 ...

  8. 接入WebSocket

    闲扯 WebSocket 以前没用过,之前写过一篇博客是基于原生socket的(查看)比较复杂,慎入.今天另外一个APP需要接websocket了,然后便找到了facebook的 SocketRock ...

  9. JavaScript是如何工作: 深入探索WebSocket和HTTP/2与SSE + 如何选择正确的路径!

    原文:<JavaScript是如何工作: 深入探索 websocket 和HTTP/2与SSE +如何选择正确的路径! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 文章底部分 ...

随机推荐

  1. Html飞机大战(六):移动飞机

    好家伙,这篇移动主角   我们先来看看一个好东西, addEventListener() 方法 (他真的很好用)   我们直译一下,就叫他添加事件监听器方法   而可监听的对象就有很多啦 我们来了解一 ...

  2. python 二分法查找字典中指定项第一次出现的索引

    import time #引入time库,后续计算时间. inform_m = {} #创建母字典 inform_s = {} #母字典下嵌套的子字典 #给母字典添加键-值 for i in rang ...

  3. 如何充分利用KingbaseES日志

    作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...

  4. 【Vue学习笔记】—— vue的基础语法 { }

    学习笔记 作者:oMing vue v-on: 简称 @ <div id='app'> <button v-on:click='Show1'> </button> ...

  5. 华南理工大学 Python第3章课后小测-2

    1.(单选)给出如下代码 s = 'Hello scut' print(s[4::-1]) 上述代码的输出结果是(本题分数:2)A) HelloB) olleHC) scutD) tucs您的答案:B ...

  6. js 对象的深复制 解决不能复制undefined (递归)

    用普通的拷贝  JSON.parse和 JSON.stringify 进行对象拷贝是不会拷贝undefined //普通的拷贝   const obj = {         a: {         ...

  7. 第一个Java代码的编写 :HelloWorld代码的编写

    HelloWorld代码的编写 创建一个新的文件夹,通过Notepad++编写第一个Java程序 , 文件名为"Hello.java" 在文件中编写,如下代码: public cl ...

  8. day03-2无异常退出

    多用户即时通讯系统03 4.编码实现02 4.3功能实现-无异常退出系统 4.3.1思路分析 上述代码运行时,在客户端选择退出系统的时候,可以发现程序并没有停止运行,原因是: 退出时,程序将循环标志l ...

  9. 连接Vue.js作为前端,Fastapi作为后端

    项目结构 ├── main.py └── templates └── home.html 环境安装 pip install fastapi[all] pip install jinja2 Backen ...

  10. CentOS7.x安装VNC

    VNC需要系统安装的有桌面,如果是生产环境服务器,安装时使用的最小化安装,那么进行下面操作安装GNOME 桌面. # 列出的组列表里有GNOME Desktop. yum grouplist #安装 ...