websocket时事通讯和socket.io实时通信库的使用;心跳机制与断线重连

news/2024/7/2 23:25:16

websocket

https://zh.javascript.info/websocket

WebSocket 是一种网络通信协议,就类似于 HTTP 也是一种通信协议。

为什么需要 WebSocket?

因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

<script>
    // 创建ws实例,建立连接  (ws://121.40.165.18:8800  有广告)
    var ws = new WebSocket("wss://javascript.info/article/websocket/demo/hello");

    // 连接成功事件
    ws.onopen = function(evt) {
        console.log("Connection open ...");
        // 发送消息
        ws.send("Hello WebSockets!");
    };
    // 接受消息事件
    ws.onmessage = function(evt) {
        console.log("Received Message: " + evt.data);
        // 关闭连接  
        ws.close();
    };
    // 关闭连接事件
    ws.onclose = function(evt) {
        console.log("Connection closed.");
    };
</script>

代码解析:

  1. 创建WebSocket实例:通过new WebSocket()创建一个WebSocket实例。在括号中传入服务器的URL,该URL指定了WebSocket服务器的地址和端口。

  2. 连接成功事件:当WebSocket连接成功建立时,onopen事件被触发,此时会执行指定的回调函数。在这个例子中,回调函数会向服务器发送一条消息,内容为"Hello WebSockets!",通过ws.send()方法发送。

  3. 接收消息事件:当接收到服务器发送的消息时,onmessage事件被触发,执行指定的回调函数。在这个例子中,回调函数会将接收到的消息打印到控制台。

  4. 关闭连接事件:当WebSocket连接关闭时,onclose事件被触发,执行指定的回调函数。在这个例子中,回调函数会打印出"Connection closed."。

socket.io使用

socket.io 是什么?

https://socket.io/

socket.io 是一个基于 WebSocket 的 CS(客户端-服务端)的实时通信库,使用它可以在后端提供一个即时通讯服务,它提供的也有一个 JS 库,在前端可以去链接后端 socket.io 创建的服务。

1.装包

npm install socket.io 

2.使用

如何建立连接?

import io from 'socket.io-client'
// 参数1:不传默认是当前服务域名,开发中传入服务器地址
// 参数2:配置参数,根据需要再来介绍
const socket = io()

如何确定连接成功?

socket.on('connect', () => {
    // 建立连接成功
})

如何发送消息?

// chat message 发送消息事件,由后台约定,可变
socket.emit('chat message', '消息内容')

如何接收消息?

// chat message 接收消息事件,由后台约定,可变
socket.on('chat message', (ev) => {
    // ev 是服务器发送的消息
})

如何关闭连接?

// 离开组件需要使用
socket.close()

心跳机制与断线重连

const socketURL = 'ws://xxxx.com/' // 连接地址
let ws = null    // websocket实例
let lockReconnect = false; // websocket连接状态,避免重复连接
let reconnectTimer = 2000  // 断开后2s自动重连
 
function setWebsocket() {
  ws = new WebSocket(socketURL)
  ws.addEventListener('open', () => {
    alert('服务连接成功');
  })
  ws.addEventListener('close', () => {
    alert('服务已断开');
    reconnect()
  })
  ws.addEventListener('error', () => {
    alert('服务发生异常');
    reconnect()
  })
  ws.addEventListener('message', event => {
    alert('收到消息:', event.data)
  })
}
 
// 重连
function reconnect() {
  if (lockReconnect) return;
  lockReconnect = true;
  setTimeout(function () {
    setWebsocket();
    lockReconnect = false;
  }, reconnectTimer);
}
 
// 页面关闭断开socket连接
window.onbeforeunload = function() {
  ws.close()
  return;
}
 
// 向外暴露
export {
    ws
}

http://lihuaxi.xjx100.cn/news/1344021.html

相关文章

Day23-正则表达式和BOM

文章目录 正则表达式1 正则表达式(RegExp)概念2 元字符案例1-基础用法案例2-正则模式案例3BOMwindow对象案例-演示window对象的方法内置对象locationhistory定时器和延时器定时器延时器清除定时器案例-时钟案例-倒计时案例-发送验证码正则表达式

使用MQTTX和前端vue进行通讯

需求&#xff1a;根据后端给的接口&#xff0c;前端实现消息订阅和消息加密连接操作&#xff0c;不走后端直接和硬件设备进行操作 1.下载mqttx 官网链接&#xff1a;MQTTX: Your All-in-one MQTT Client Toolbox 根据自己电脑选择不同的操作系统&#xff0c;默认下载后是英文…

【深度学习笔记】训练 / 验证 / 测试集

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…

键盘控制鼠标移动

记录一下&#xff0c; windows用autohotkeys ^up::MouseMove,0,-75,0,r ^up::MouseMove,0,-15,0,r ^down::MouseMove,0,75,0,r ^down::MouseMove,0,15,0,r ^left::mousemove,-75,0,0,r ^left::mousemove,-15,0,0,r ^right::mousemove,75,0,0,r ^right::mousemove,15,0,0,r ^s…

Unity游戏源码分享-Unity手游火柴忍者游戏StickmanDojo

Unity游戏源码分享-Unity手游火柴忍者游戏StickmanDojo 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88050234

解决meta quest2时间对不上问题

解决meta quest2时间对不上问题&#xff0c;与标准时间相差大于1min 最近游玩quest2时发现时间对不上导致一系列问题&#xff0c;遂搜索解决方案 步骤如下 使用sidequest &#xff0c;如果还没下可以到sidequest官网下载电脑版本 点此进入官网https://sidequestvr.com/使用us…

explain 是干嘛的

explain 是干嘛的 1.explain的作用 在MySQL中&#xff0c;EXPLAIN是一个用于查询优化的关键字。它可以用于分析查询语句的执行计划&#xff0c;帮助开发人员和数据库管理员理解查询的执行方式、查询涉及的表和索引、连接类型、查询优化器的决策等信息。 通过使用EXPLAIN关键…

fastapi初使用,构建自己的api

文章目录 1、安装2、api实现2.1、 app.get("/1")2.2、app.get("/{a}")2.3、app.get("/{a}{b}")2.4、函数和api分离 3、运行 原文链接&#xff1a;https://wangguo.site/posts/d98bb3c9.html fastapi 是一个基于 Python 的 API 构建框架&#xff…