websocket消息的实现

devtools/2024/11/24 10:50:42/

1. 创建 WebSocket 连接

WebSocket 是通过 WebSocket 对象建立的。连接成功后,前端可以与服务器双向通信。

const socket = new WebSocket('ws://your-server-url');// 监听连接建立
socket.onopen = () => {console.log('WebSocket connection established');// 可以在连接建立后发送一条消息socket.send(JSON.stringify({ type: 'INIT', payload: 'Hello Server!' }));
};// 监听错误
socket.onerror = (error) => {console.error('WebSocket error:', error);
};// 监听连接关闭
socket.onclose = (event) => {console.log('WebSocket connection closed:', event);
};

2. 接收服务器消息

通过监听 onmessage 事件来处理服务器推送的消息。

socket.onmessage = (event) => {try {const message = JSON.parse(event.data); // 假设服务器发来的是 JSON 格式的数据console.log('Received message from server:', message);// 根据消息类型做不同处理switch (message.type) {case 'UPDATE':// 更新前端状态console.log('Update:', message.payload);break;case 'ALERT':// 展示提示信息alert(message.payload);break;default:console.warn('Unknown message type:', message.type);}} catch (err) {console.error('Error parsing message:', err);}
};

3. 发送消息到服务器

可以通过 socket.send 方法发送数据到服务器。

// 发送简单消息
socket.send('Hello Server');// 发送 JSON 数据
socket.send(JSON.stringify({ type: 'PING', timestamp: Date.now() }));

4. 处理重连逻辑

为了提高 WebSocket 的可靠性,需要处理连接断开后的重连。

function createWebSocket(url: string) {let ws: WebSocket | null = null;function connect() {ws = new WebSocket(url);ws.onopen = () => console.log('Connected');ws.onmessage = (event) => console.log('Message received:', event.data);ws.onclose = (event) => {console.log('Disconnected:', event.reason);// 自动重连setTimeout(connect, 3000);};ws.onerror = (error) => {console.error('WebSocket error:', error);};}connect();return ws;
}const socket = createWebSocket('ws://your-server-url');

5. 前端框架集成

React 中使用 WebSocket

使用 useEffect 创建和清理 WebSocket。

import React, { useEffect, useState } from 'react';const WebSocketDemo: React.FC = () => {const [messages, setMessages] = useState<string[]>([]);useEffect(() => {const socket = new WebSocket('ws://your-server-url');socket.onopen = () => console.log('Connected');socket.onmessage = (event) => {setMessages((prev) => [...prev, event.data]);};socket.onclose = () => console.log('Disconnected');socket.onerror = (error) => console.error('Error:', error);// 清理连接return () => {socket.close();};}, []);return (<div><h1>WebSocket Messages</h1><ul>{messages.map((msg, index) => (<li key={index}>{msg}</li>))}</ul></div>);
};export default WebSocketDemo;

6. 优化与注意事项

  1. 心跳检测: 定期发送心跳包检测连接状态。

     
    ​setInterval(() => {    if (socket.readyState === WebSocket.OPEN) {        socket.send(JSON.stringify({ type: 'PING' }));    }}, 10000);

  2. 断开重连: 确保在连接断开时自动尝试重新连接。

  3. 防止消息阻塞: 使用队列存储待发送消息,确保连接恢复时不会丢失重要信息。

  4. 消息格式: 推荐使用 JSON 格式,明确消息类型和数据。


http://www.ppmy.cn/devtools/136531.html

相关文章

SELinux知识点

SELinux 软件安全性 《关于UNIX的安全》中Dennis Ritchie提到&#xff1a;“首先要面对的事实是&#xff0c;UNIX的开发者并没有考虑安全问题&#xff0c;单这一点就单会引发大量的漏洞”。主要是因为防火墙通常不具备查杀病毒的能力&#xff0c;只能对数据包过滤&#xff0c…

Mac设置java环境变量

Mac电脑中存在多个jdk版本,如何配置java环境变量为指定版本jdk? 一、查看所有已安装的 JDK 版本 /usr/libexec/java_home -V二、临时设置 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)三、永久设置 如果需要永久使用指定版

计算机网络的初步认识

文章目录 一、初识计算机网络1.1、基本概念和特点1.1.1、基本概念1.1.2、特点1.2、分类1.3、性能指标1.4、体系结构1.4.1、体系结构的基本认识1.4.2、TCP/IP的深入认识二、初始互联网2.1、互联网概念和特点2.1.1、概念2.1.2、特点2.2、互联网组成2.2.1、边缘部分2.2.2、核心部分…

微网能量管理研究

微网能量管理研究的重点 微网系统的建模 建立分布式能源单元模型以及微网系统的整体运行、协调控制和优化配置等方面的模型 分布式电源控制策略 微网内分布式电源及储能系统运行依赖于电力电子接口技术&#xff0c;需要相应的充放电控制策略 再生能源发电预测 准确预测太阳能…

Redis分布式锁的原理与Redisson实现

Redis分布式锁的原理与Redisson实现 目录 引言Redis分布式锁的基本原理Redisson实现Redis分布式锁Redisson分布式锁的使用示例小结 引言 在分布式系统中&#xff0c;多个服务实例同时访问共享资源时&#xff0c;可能会导致数据不一致或竞争条件。为了解决这些问题&#xff…

CANDENCE: 原理图中如何批量修改元件封装

原理图中如何批量修改元件封装 一、选中一部分元件更换封装 更换下图中的几个电阻的封装 选中这几个电阻&#xff0c;点击 “edit properties” 弹出以下对话框 点击“pivot”, 找到封装一栏 可以单个修改 也可以多个一起修改 修改完成 二、选中一页原理图中的元件更换封装…

从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发

从繁琐到优雅&#xff1a;用 PyTorch Lightning 简化深度学习项目开发 在深度学习开发中&#xff0c;尤其是使用 PyTorch 时&#xff0c;我们常常需要编写大量样板代码来管理训练循环、验证流程和模型保存等任务。PyTorch Lightning 作为 PyTorch 的高级封装库&#xff0c;帮助…

[开源] SafeLine 好用的Web 应用防火墙(WAF)

SafeLine&#xff0c;中文名 “雷池”&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击 一、简介 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注…