WebSocket的那些事(2-实操篇)

news2024/11/26 4:29:14

目录

  • 一、概述
  • 二、Websocket API
    • 1、引入相关依赖
    • 2、配置WebSocket处理器
    • 3、WebSocket配置
    • 4、测试
  • 三、总结

一、概述

在上一节 WebSocket的那些事(1-概念篇)中我们简单的介绍了关于WebSocket协议的相关概念、与HTTP的联系区别等等。

这一节将会带来WebSocket的实操环节,主要包括Spring本身提供的WebSocket API以及对STOMP协议的支持。


二、Websocket API

1、引入相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

2、配置WebSocket处理器

这里我们创建了简单的EchoWebsocketHandler ,会原封不动返回来自客户端的消息。

@Slf4j
public class EchoWebsocketHandler extends TextWebSocketHandler {

	@Override
	protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
		String content = new String(message.asBytes(), StandardCharsets.UTF_8);

		log.info("WebSocket message received: {}", content);
		session.sendMessage(message);
	}

	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		log.info("Connection established, request uri:{}", session.getUri());
	}

	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
		log.info("Connection closed, request uri:{}", session.getUri());
	}
}

3、WebSocket配置

@Configuration
@EnableWebSocket
public class WebsocketConfig implements WebSocketConfigurer {

	@Override
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		// HttpSessionHandshakeInterceptor可以将HttpSession中的属性转换为WebsocketSession的属性
		registry.addHandler(new EchoWebsocketHandler(), "/echo")
			.addInterceptors(new HttpSessionHandshakeInterceptor());
	}

	@Bean
	public ServletServerContainerFactoryBean createWebSocketContainer() {
		ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
		// 指定单次最大可传输的文本消息大小为4 * 1024字符
		container.setMaxTextMessageBufferSize(4 * 1024);
		// 指定单次最大可传输的二进制消息大小为8 * 1024字节
		container.setMaxBinaryMessageBufferSize(8 * 1024);
		return container;
	}
}

4、测试

直接启动项目,打开Postman,输入 ws://localhost:8080/echo ,如下:
在这里插入图片描述
点击连接后,显示连接成功,直接发送消息即可。可以看到,客户端发什么,服务端就响应什么。
在这里插入图片描述


三、总结

使用原生Websocket会有一些缺点,我们总结一下:

  • 兼容性问题:Websocket是HTML5标准中新增的技术,并不是所有浏览器都支持该技术。
  • 连接维持问题:WebSocket连接是一直保持开放状态的,因此会占用一定的带宽和资源。如果连接数量过多或者连接持续时间过长,可能会对服务器造成一定的压力。
  • 安全问题:WebSocket连接的开放性可能会引起一些安全问题,例如未经授权的用户访问WebSocket服务、数据被劫持等。
  • 服务端实现问题:由于消息内容并没有传输标准,无法对消息进行路由和处理。

下篇文章我们将会结合SockJSSTOMP来实现WebSocket消息传输。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BM59-N皇后问题

题目 N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后。 要求&#xff1a;任何两个皇后不同行&#xff0c;不同列也不在同一条斜线上。 求给一个整数 n &#xff0c;返回 n 皇后的摆法数。 数据范围: 1≤n≤9。 要求&#xff1a;空间复杂度 O(1) &#xff0c;时间复杂度 O(…

牛客 NC24724 Feb S]Chocolate Eating 解题报告

原题链接&#xff1a; 登录—专业IT笔试面试备考平台_牛客网 题目描述&#xff1a; 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 Bessie has received N (1 < N < 50,000) chocolates from the bulls, but doesnt want to …

Notepad++ 配置python环境及虚拟环境

背景&#xff1a; 在执行某些项目的时候&#xff0c;经常会否遇到这样一种情况(以python语言为例)&#xff1a;不想在python的基础环境下运行&#xff0c;创建了虚拟环境来装相关项目的包&#xff0c;但是每次使用都要切换到虚拟环境下面使用"activate "命令激活环境…

C++linux高并发服务器项目实践 day8

Clinux高并发服务器项目实践 day8 内存映射内存映射相关系统调用例子思考问题案例2案例3 信号信号的5中默认处理动作信号相关函数kill、raise和abort函数alarm函数案例 setitimer函数 signal信号捕捉函数 内存映射 内存映射是将磁盘文件的数据映射到内存&#xff0c;用户通过修…

Spring MVC数据格式化与验证以及国际化和中文乱码处理

目录 Spring MVC数据格式化 基本介绍 ConversionService converters 基本数据类型和字符串自动转换 代码实例 -页面演示方式 创建Monster 类 创建data_valid.jsp 创建MonsterHandler类 创建monster_addUI.jsp 解读: 说明 阶段测试一下 ​编辑 继续完成功能 创建s…

springboot+vue校园疫情防控系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园疫情防控系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

理想汽车VS特斯拉,电动汽车正在吞噬世界

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 电动汽车正在吞噬世界 长期以来&#xff0c;电动汽车在美国一直是一项边缘技术&#xff08;当时主要是加州的环保主义者和科技圈在关注&#xff09;。即使现在如日中天的特斯拉(TSLA)&#xff0c;当年也是在成立三年后的20…

【案例1】图书馆管理系统毕业论文

博主介绍&#xff1a; &#x1f680;自媒体 JavaPub 独立维护人&#xff0c;全网粉丝打大于100w&#xff0c;csdn博客专家、java领域优质创作者&#xff0c;51ctoTOP10博主&#xff0c;知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和副业。&#x1f680; …

npm私有仓库(nexus)-Vue组件发布到nexus

1、创建组件项目 进入项目目录并 执行 npm install 安装依赖&#xff0c;npm run dev 运行&#xff0c;此时浏览器打开 http://localhost:8080 可看到初始化页面 2、在 src 目录下新建测试组件&#xff0c;如下图所示 3、项目目录下新建组件暴露文件 4、修改 package.json pri…

Spring Boot项目使用maven的jib插件打docker使用所需的镜像tar包

jib插件介绍 Jib是一个由Google开发的基于Docker镜像构建的工具&#xff0c;它的Maven插件可以让我们以更高效的方式构建和管理Docker镜像。使用Jib&#xff0c;我们可以摆脱手动编写Dockerfile的繁琐过程&#xff0c;而是直接将我们的Java应用程序打包为镜像&#xff0c;并将…

CPU狂飙900%,该怎么处理?

一位小伙伴面试了 网易&#xff0c;遇到了一个 性能类的面试题&#xff1a;CPU飙升900%&#xff0c;该怎么处理&#xff1f; 可惜的是&#xff0c;以上的问题&#xff0c;这个小伙没有回答理想。 最终&#xff0c;导致他网易之路&#xff0c;终止在二面&#xff0c;非常可惜 …

MySQL学习笔记第九天

第08章聚合函数 上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类&#xff0c;叫做聚合&#xff08;或聚集、分组&#xff09;函数&#xff0c;它是对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&#xff0c;输出的是单个值。 1.聚合函数介绍 什么是聚合…

智能优化算法:袋獾优化算法-附代码

智能优化算法&#xff1a;袋獾优化算法 文章目录 智能优化算法&#xff1a;袋獾优化算法1. 袋獾优化算法1.1 初始化1.2 策略一&#xff1a;以腐肉为食&#xff08;探索阶段&#xff09; 2.实验结果3.参考文献4.Matlab 摘要&#xff1a;袋獾优化算法&#xff08;Tasmanian Devil…

MyBatis官方文档学习笔记(一)

本笔记根据mybatis官方文档顺序学习&#xff0c;根据本笔记可快速掌握mybatis的使用。 1 快速开始 1.1 快速开始 1.1.1 安装 使用MyBatis之前必须要安装mybatis-x.x.x.jar驱动文件到类路径中&#xff0c;如果使用的是Maven工程&#xff0c;则只需要导入下面的依赖即可&…

Java集合-Java集合基础

目录 讲一讲Java集合吧 集合的使用 为什么要使用集合&#xff1f; 如何选用集合? Collection Collection与Collections的区别是什么&#xff1f; Collections.sort和Arrays.sort的实现原理 为何Collection不从Cloneable和Serializable接口继承&#xff1f; 线程安全集…

面向开发人员的 ChatGPT 提示语教程中文版

面向开发人员的 ChatGPT 提示语教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

新魔百盒M304A_增强版2+16G_S905系列_UWE5621DS_卡刷/线刷固件包-当贝桌面

新魔百盒M304A_增强版216G_S905系列_UWE5621DS_卡刷&#xff0f;线刷固件包-当贝桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内…

第三十九章 Unity 图像 (Image) UI

本章节&#xff0c;我们介绍一下“Image”UI元素&#xff0c;首先我们创建一个新场景“SampleScene2.unity”。然后我们点击菜单栏“GameObjec”->“UI”->“Image”&#xff0c;如下所示 我们将其放置到了中间位置&#xff0c;检视面板中的参数如下 默认情况下&#xf…

python基础-内置高阶函数map/reduce/filter函数的使用

一、map Python内置函数&#xff0c;用法及说明如下&#xff1a; class map(object):"""map(func, *iterables) --> map objectMake an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterab…

工控机All In One——篇1,pve安装(必读)

工控机All In One——篇1&#xff0c;pve安装 1、背景 满足家庭一机多用&#xff0c;同时满足软路由&#xff08;主旁路由&#xff09;、远程控制、NAS&#xff08;个人存储&#xff09;等功能 2、准备 硬件 1、J4125工控机 2、一个usb分线器 3、鼠标键盘 4、带HDMI或VGA接…