websocket的reconnecting-websocket的使用

2023-05-16

1. 引用 reconnecting-websocket.js

npm i reconnecting-websocket

2. 建立websocket.ts

import ReconnectingWebSocket from 'reconnecting-websocket';

let rws: any = null;
let globalCallback: any = null;

//初始化websocket
const initWebsocket = () => {
  // let url = "ws://192.168.3.87:8081/ws";
  let url = "ws://localhost:3001";
  // 建立websocket 连接
  rws = new ReconnectingWebSocket(url);
  rws.addEventListener("open", () => {
    if (!rws) return;
    if (rws.readyState === 1) {
      webSocketOpen();
    }
  });

  //收信
  rws.addEventListener("message", (e: any) => {
    webSocketOnMessage(e.data);
  });

  // 错误时进行的处理
  rws.addEventListener("error", (e: any) => {
    console.error(e.message);
  });

  // 关闭时进行的操作
  rws.addEventListener("close", () => {
    webSocketClose();
  });
}

//连接socket建立时触发
const webSocketOpen = () => {
  console.log("建立成功,发送消息");
  let token: any = localStorage.getItem('tokenkey');
  if (!isNullOrUndefined(token)) {
    let obj = {
      kind: 1,
      token: token,
      id: 0
    }
    sendSock(obj, () => { });
  }
}

//客户端接收服务端数据时触发,e为接受的数据对象
const webSocketOnMessage = (data: any) => {
  globalCallback(data);//JSON.parse(decrypt(data))
}

//发送数据
const webSocketSend = (data: object) => {
  rws.send(data);
}

//关闭socket
const webSocketClose = () => {
  rws.close();
  console.log("对话连接已关闭");
}


// 实际调用的方法
const sendSock = (agentData: any, callback: any) => {
  console.log("重新连接")
  globalCallback = callback;
  console.log("rws.readyState", rws);
  switch (rws.readyState) {
    //OPEN:值为1,表示连接成功,可以通信了。
    case rws.OPEN:
      console.log("OPEN")
      webSocketSend(agentData);
      break;
    // CONNECTING:值为0,表示正在连接。
    case rws.CONNECTING:
      console.log("CONNECTING", callback)
      setTimeout(function () {
        //@ts-ignore
        webSocketSend(agentData, callback);
      }, 1000);
      break;
    // CLOSING:值为2,表示连接正在关闭。
    case rws.CLOSING:
      console.log("CLOSING")
      setTimeout(() => {
        //@ts-ignore
        webSocketSend(agentData, callback);
      }, 1000);
      break;
    // CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
    case rws.CLOSED:
      console.log("CLOSED")
      // do something
      break;
    default:
      console.log("default")
      break;
  }
}

export { initWebsocket, webSocketClose, sendSock };

3. 页面使用

import * as socketApi from '@/utils/websocket'


   socketApi.sendSock('发送的数据', (e: any) => {
       console.log("后台发送过来的数据", e)
   })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

websocket的reconnecting-websocket的使用 的相关文章

  • 使用来自 WebSocket @ServerEndpoint 的 CDI @SessionScoped bean

    在 Web 应用程序中 用户使用 servlet HTTP 会话 一些数据存储在 CDI SessionScoped beans 中 稍后在某些页面中 WebSocket 通信是在用户浏览器和服务器之间执行的 对于 GlassFish 4
  • 通过nodejs服务器+socket.io从mp3文件同步流式传输音乐

    我的服务器上有一个 mp3 文件 我希望所有访问该网址的客户都能同步收听该音乐 That is 假设该文件播放 6 分钟 我在上午 10 00 开始播放这首歌 上午 10 03 发出的请求应从歌曲的第 3 分钟开始收听 我所有的客户都应该同
  • WebSocket 握手:意外响应代码:404

    正在编写我的第一个 websocket 程序并且正在得到 WebSocket 握手 意外响应代码 404 加载网页时出错 我使用的是 JDK 1 7 和 jboss 8 wildfly8 0 有人可以帮忙吗 window onload in
  • WebSocket Stomp over SockJS - http 自定义标头

    我在 javascript 客户端中使用 stomp js 而不是 SockJS 我正在使用连接到 websocket stompClient connect function frame stomp over sockJS 连接有 2 个
  • GO Websocket 向所有客户端发送消息

    这段代码一切正常 为了更好的阅读而缩短了它 When Client1向服务器发送请求 服务器立即响应他 但是 其他客户端看不到响应消息 所以我想更进一步 当客户端向服务器发送请求时 服务器会响应所有客户端 以便所有客户端都可以看到该消息 我
  • ServerEndpoint 和 web.xml

    我有一些 Soap REST servlet 现在还有一个 WebSocket ServerEndpoint game public class WebSocketgame 我有下一个麻烦 如果 web xml 存在 WebSocket 不
  • 客户端通过 websocket 连接从后端服务器数据库表检索数据

    我使用以下服务器代码从 postgres 数据库检索数据 const express require express const app express const server require http createServer app
  • WebSocket 和负载平衡是瓶颈吗?

    当有一堆充当 WebSocket 无人机的系统和这些无人机前面的负载均衡器时 当 WebSocket 请求进入 LB 时 它会选择一个 WebSocket 无人机 并建立 WebSocket 我在 ELB 上使用 AWS ELB tcp S
  • webpack-dev-server 中的代理 websockets 连接

    是否可以在 webpack 开发服务器中代理 websocket 连接 我知道如何将常规 HTTP 请求代理到另一个后端 但它不适用于 websockets 大概是因为代理配置中的目标以 http 开头 webpack dev server
  • 在cypress中捕获websocket请求

    我试图捕获测试期间发生的所有请求 我的应用程序使用 WebSocket 并且使用拦截命令我无法捕获 wss 请求 有什么办法可以做到这一点吗 我认为拦截命令不能直接捕获网络套接字 一种方法是观察 ws 通信的结果 如下所示使用 Cypres
  • 带 cookie 身份验证的 Gorilla websocket

    这是我的设置 我正在构建一个带有用户登录的服务 使用 Negroni 和 Gorilla 登录后 用户会获得一个会话 cookie 服务器使用该会话 cookie 来授权受保护的端点 受保护的端点之一允许用户 客户端与服务器打开 Webso
  • WebSockets 监听 UNIX 域套接字?

    是否可以在 nginx 服务器后面设置一个 WebSockets 服务器来处理 UNIX 域套接字上的连接 我目前在同一台计算机上有多个 WebSocket 服务器实例 并且存在端口共享问题 所有实例都必须分配一个唯一的端口 我想避免这种情
  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • 通过 PHP 连接到 socket.io(nodejs)

    我需要通过 php 连接到 websocket 发送数据并立即断开连接 无需等待套接字的响应 我用了大象io http elephant io 但更新库后不起作用 请告诉我如何通过 PHP 连接到 websocket 我也遇到了这个问题 学
  • WebSocket 无法与 DNS 配合使用

    我有一个网络应用程序 我正在使用 websockets 我在使用 ws myDomain com 作为 websocket 服务器的地址时遇到问题 这个问题很奇怪 因为我使用许多 PC 测试了连接 似乎这适用于大约 1 5 的 PC 当我将
  • webhook 和 websocket 之间的区别?

    我一直想进行实时聊天 几年前我用 PHP Ajax Mysql 完成了这个任务 并破坏了我的服务器 然后我尝试使用 Flash 文本文件 我放弃了 10年没有尝试过 但最近我听说了 webhooks 和 websockets 它们似乎都是做
  • 当存在打开的 ASP.NET 4.5 Websocket 时,IIS 应用程序池无法回收

    我遇到了一个问题 可以通过以下方式复制 您需要 IIS8 因此必须在 Windows 8 或 Windows Server 2012 R2 上 在 IIS 管理器中创建一个新网站 例如在端口 8881 上的 TestWs 指向一个新文件夹
  • @SubscribeMapping 与 @MessageMapping

    当在 Spring Boot 中使用 websockets 时 我见过使用以下示例 Configuration EnableWebSocketMessageBroker public class WebSocketConfig extend
  • Edge浏览器Websocket连接将在空闲时间后自动关闭

    我在新的Window Edge浏览器上做了关于Websocket的测试 看来Edge浏览器上的websocket连接会在空闲时间后自动关闭 没有数据传输b w 2端点 在 Chrome 或 Firefox 上不会出现此问题 我只是好奇 在E
  • 带有服务总线的 SignalR Azure 云服务

    我使用 SignalR 构建了一个简单的聊天应用程序那里有教程 http www asp net signalr overview getting started tutorial getting started with signalr

随机推荐