【计网】WebSocket协议

news/2025/3/31 13:41:25/

目录

一、背景

二、WebSocket握手过程

三、SpringBoot中使用WebSocket协议

1、服务器

 2、客户端


一、背景

一般的web开发以请求响应为主即客户端发送一个请求,服务器返回一个响应,这就使得类似聊天等需求基于HTTP协议进行实现时比较消费资源,使用HTTP协议时,当用户A给用户B发送的消息到达服务器后需要服务器去主动的给用户B进行推送,显然HTTP是难以做到的(需要基于轮询机制),这个时候我们就可以使用WebSocket来实现消息推送机制。他也是一个应用层协议,下层是基于TCP的

二、WebSocket握手过程

当网页端尝试与服务器建立连接

网页端会先给服务器发送一个特殊的http请求,这个请求里带有特殊的header:  Connection:Upgrade 与 Upgrade:WebSocket,这两个header相当于告知服务器进行协议升级。此时如果服务器支持webSocket就会返回一个特殊的http响应,这个响应的状态码就是101(切换协议),此时就开始使用webSocket

三、SpringBoot中使用WebSocket协议

1、服务器

首先我们需要创建一个类去继承TextWebSocketHandler,然后重新他的方法

package com.example.demo.controller;import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;public class Chat extends TextWebSocketHandler {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {System.out.println("success");}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("get message" + message.getPayload());}@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {System.out.println("error");}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {System.out.println("close");}
}

 然后我们需要将这个类配置到spring中:创建配置类继承WebSocketConfigurer接口重写方法

package com.example.demo.configur;import com.example.demo.controller.Chat;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new Chat(),"/chat");}
}

服务器给客户端发送消息时可通过WebSocketSession里的sendMessage(new TextMessage(消息))来发送 

 2、客户端

此时我们就可以来实现前端代码

<script>// 创建实例let webScoekt = new WebSocket("ws://127.0.0.1:8080/chat");// 实现回调函数webScoekt.onopen = function() {console.log("连接建立")}webScoekt.onerror = function() {console.log("连接异常")}webScoekt.onclose = function() {console.log("连接关闭")}webScoekt.onmessage = function(body) {console.log("收到消息" + body.data)}</script>

客户端给服务器发送消息时可以通过webSocket.send(消息)进行发送


http://www.ppmy.cn/news/54737.html

相关文章

Python语法学习

目录 Openmv用micro python开发的原因 print函数 列表 元组 判断 if...else... if...elif...else 循环 for循环 while循环 强制类型转换 点灯之路 点个不同颜色的闪烁LED 本文章仅作为个人的Openmv学习笔记&#xff0c;有问题欢迎指正~ Openmv用micro python开发…

C#:如何用分部类将一个大文件改为多个小文件?

很多时候我们会发现&#xff0c;写来写去&#xff0c;一个文件慢慢就变得很大了&#xff0c;行数过千基本上就维护比较困难。 将公共代码模块化&#xff0c;可以减少一些代码&#xff0c;也是非常有效的。 那还有其它办法吗&#xff1f; 用 分部类 可以解决。 下面是简单的…

「数据架构」MDM实现失败的主要原因

我经常参与一个组织的MDM程序&#xff0c;当他们在一个失败的项目之后向InfoTrellis请求帮助进行清理&#xff0c;或者开始尝试X&#xff0c;以实现对某些人来说非常困难的目标时。主数据管理实现失败的原因有很多&#xff0c;但是没有一个是由于在这些场景中使用的责备游戏的原…

04.DolphinScheduler使用详细介绍

文章目录 创建Worker分组-指定执行机器使用创建执行脚本用户 执行脚本执行Shell脚本执行Spark任务执行Spark任务可能的报错Storage service config does not exist! 执行Hive任务执行HTTP任务创建任务任务参数任务样例 参数使用内置参数基础内置参数衍生内置参数画布中引用方法…

如何使用快速排序算法对整数数组进行就地排序?

快速排序是什么 快速排序算法是最常用的排序算法之一&#xff0c;尤其是对大型列表进行排序时&#xff0c;大多数编程语言、库都以一种或另一种方式实现了它。在 Java 中&#xff0c;Arrays.sort()方法使用由 Joshua Bloch 等人编写的双枢轴 快速排序 算法对原始数据类型进行排…

Ch1. 逻辑结构、存储结构、时间复杂度、空间复杂度

文章目录 一、逻辑结构 与 存储结构1.逻辑结构(1)集合结构(2)线性结构(3)树形结构(4)图形结构2.存储结构(物理结构)(1)顺序存储(2)链式存储(3)索引存储(4)散列存储概念二、时间复杂度、空间复杂度算法时间复杂度 T(n)空间复杂度 S(n)给定一段代码,判断时间复杂度一、逻辑结构 …

springboot+vue高校实验室预约管理系统

开发环境 开发语言&#xff1a;Java 后端框架&#xff1a;springbootweb 前端框架&#xff1a;vue.js 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 校实验…

地理信息系统有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是几本地理信息系统领域的SCI期刊推荐&#xff1a; International Journal of Geographical Information Science: 这是一个国际性的期刊&#xff0c;它涵盖了地理信息科学的所有领域&#xff0c;包括地图学、遥感、空间分析、地理信息系统、地理信息技术、地球信息学等等…