当前位置: 首页 > news >正文

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

目录

  • 一、概述
  • 二、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 {@Overrideprotected 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);}@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {log.info("Connection established, request uri:{}", session.getUri());}@Overridepublic 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 {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {// HttpSessionHandshakeInterceptor可以将HttpSession中的属性转换为WebsocketSession的属性registry.addHandler(new EchoWebsocketHandler(), "/echo").addInterceptors(new HttpSessionHandshakeInterceptor());}@Beanpublic 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消息传输。

在这里插入图片描述

相关文章:

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

目录 一、概述二、Websocket API1、引入相关依赖2、配置WebSocket处理器3、WebSocket配置4、测试 三、总结 一、概述 在上一节 WebSocket的那些事&#xff08;1-概念篇&#xff09;中我们简单的介绍了关于WebSocket协议的相关概念、与HTTP的联系区别等等。 这一节将会带来Web…...

BurpSuite—-Target模块(目标模块)

前言 本文主要介绍BurpSuite—-Target模块(目标模块)的相关内容 关于BurpSuite的安装可以看一下之前这篇文章&#xff1a; http://t.csdn.cn/cavWt Target功能 目标工具包含了SiteMap&#xff0c;用你的目标应用程序的详细信息。它可以让你定义哪些对象在范围上为你目前的工…...

部门来了个测试开发,听说是00后,上来一顿操作给我看呆了...

公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司实习半年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍&#xff01…...

Godot引擎 4.0 文档 - 入门介绍 - Godot简介

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a;Introduction to Godsot — Godot Engine (stable) documentation in English Godot简介 本文旨在帮助您确定 Godot 是否适合您。我们将介绍该引擎的一些广泛功能&#…...

数据通信基础 - 码元速率 和 数据速率 详解

文章目录 1 概述1.1 码元速率&#xff08;波特率&#xff09;1.2 数据速率&#xff08;比特率&#xff09;1.3 码元速率 和 数据速率 换算 2 网工软考真题 1 概述 1.1 码元速率&#xff08;波特率&#xff09; 码元速率&#xff1a;表示单位时间内信号波形的变换次数&#xf…...

听我一句劝,别去外包,干了三年,废了....

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...

全域兴趣电商:国货品牌的新策略、新玩法

【潮汐商业评论/原创】 消费的方向标已经变了。 在消费市场的滚滚浪潮里&#xff0c;国人的“衣食住行”在全面的“国货化”&#xff0c;一个个有颜值有实力的国货品牌如雨后春笋般出现在寻常百姓家&#xff0c;如今在这片肥沃的土壤上正结出适合国人使用的果实。 01 国货二…...

嵌入式 Linux 入门(十一、make 和 MakeFile)

嵌入式 Linux 入门第十一课&#xff0c;Make 工具和 Makefile 的引入...... 矜辰所致目录 前言一、Linux 下多文件编译二、make 工具和 Makefile2.1 make 和 Makefile 是什么?2.2 通过 STM32 提前熟悉 Makefile2.3 GCC 与 make 的关系/区别&#xff1f; 三、一个简单的 Makefi…...

Serverless冷扩机器在压测中被击穿问题 | 京东云技术团队

一、现象回顾 在今天ForceBot全链路压测中&#xff0c;有位同事负责的服务做Serverless扩容&#xff08;负载达到50%之后自动扩容并上线接入流量&#xff09;中&#xff0c;发现新扩容的机器被击穿&#xff0c;监控如下&#xff08;关注2:40-3:15时间段的数据&#xff09;&…...

数仓中指标-标签,维度-度量,自然键-代理键等各名词深度解析

作为一个数据人&#xff0c;是不是经常被各种名词围绕&#xff0c;是不是对其中很多概念认知模糊。有些词虽然只有一字之差&#xff0c;但是它们意思完全不同&#xff0c;今天我们就来了解下数仓建设及数据分析时常见的一些概念含义及它们之间的关系。 本文首发于公众号【五分钟…...

Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(Mono)

Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式&#xff08;C&#xff09; Baumer工业相机Baumer工业相机图像数据转为Bitmap的技术背景Baumer工业相机使用BGAPISDK将图像数据转换为Bitmap的几种方式1.引用合适的类文件2.BGAPI SDK原始图像数据为Bi…...

C++笔试笔记2

C笔试笔记2 百富计算机的笔试 const限定符&#xff1a;首先作用于左边&#xff0c;如果左边没东西&#xff0c;就作用于右边。 const int&#xff1a; 左边没有内容&#xff0c;所以const作用于右边&#xff0c;就是“整型常量”。等同于int const&#xff1b; int * const&am…...

手写Spring框架

手写Spring框架 各位道友&#xff0c;我发现现在贼卷底层代码&#xff0c;看完源码发下几天后&#xff0c;额&#xff01;&#xff01;&#xff01;我当时看了啥&#xff01; 还是自己写个迷你的spring框架&#xff0c;这样印象更加深刻&#xff0c;上干货&#xff0c;代码仓…...

微服务学习笔记--(Docker)

目录 初识DockerDcoker的基本操作Dockerfile自定义镜像Docker-ComposeDocker镜像服务 初始Docter 什么是DockerDocker和虚拟机的区别Docker架构安装Docker 初识Docker-什么是docker 项目部署的问题 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会碰…...

ChatGPT 国内版免费

ChatGPT 是最新的聊天机器人技术&#xff0c;它可以让你更快地完成各种任务。如果你想要一个在国内的免费版本&#xff0c;你来对地方了&#xff01;在这篇文章中&#xff0c;我们将会分享与你 ChatGPT的最新信息&#xff0c;以及在国内使用 ChatGPT 的方法。如果你想要了解更多…...

推荐5个免费好用的UI模板网站!

1、即时设计 即时设计资源广场是一个聚集了大量优秀设计作品和大厂设计系统超过3000个UI组件库的设计师灵感库。该广场每月更新上百个精品模板&#xff0c;且还将这些模板分门别类按不同类型素材进行分类&#xff0c;其丰富的设计资源包括移动设计、网页设计、插画、线框图、矢…...

linux 安装 maven 3.8 版本

文章目录 1&#xff1a;maven 仓库官网 2、下载安装包 3、使用&#xff1a;Xftp 上传到你想放的目录 4、解压文件 ​编辑 5、配置环境变量 ​编辑 6、刷新 /etc/profile 文件 7、查看maven 版本 1&#xff1a;maven 仓库官网 Maven – Download Apache Mavenhttps://mave…...

Redis的三种持久化策略及选取建议

文章目录 Redis的三种持久化策略及选取建议前言RDB&#xff08;快照&#xff09;概述优缺点 AOF&#xff08;追加文件&#xff09;概述优缺点AOF刷盘策略AOF重写 选取正确的持久化策略AOF和RDB的选择AOF与RDB的混合模式AOF重写和RDB持久化的冲突AOF校验机制三种模式的选择建议 …...

力扣LCP 33. 蓄水

LCP 33. 蓄水 给定 N 个无限容量且初始均空的水缸&#xff0c;每个水缸配有一个水桶用来打水&#xff0c;第 i 个水缸配备的水桶容量记作 bucket[i]。有以下两种操作&#xff1a; 升级水桶&#xff1a;选择任意一个水桶&#xff0c;使其容量增加为 bucket[i]1 蓄水&#xff1…...

内网渗透(八十一)之搭建Exchange服务器

搭建Exchange服务器 环境安装准备 1、Windows Server 2012 R2以管理员身份运行Windows Powershell,安装必需的 Windows组件: Install-WindowsFeature NET-Framework-45-Features, Server-Media-Foundation, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInt…...

正视孩童情绪波动,耐心陪伴平稳疏导

孩子的情绪就像夏天的天气&#xff0c;前一秒还晴空万里&#xff0c;后一秒可能就乌云密布。面对突如其来的哭闹、发脾气或者闷闷不乐&#xff0c;很多家长会急着“灭火”——要么讲道理&#xff0c;要么直接制止。但其实&#xff0c;情绪波动本身不是问题&#xff0c;它是孩子…...

完整指南:如何在5分钟内快速上手BioAge生物年龄计算工具包

完整指南&#xff1a;如何在5分钟内快速上手BioAge生物年龄计算工具包 【免费下载链接】BioAge Biological Age Calculations Using Several Biomarker Algorithms 项目地址: https://gitcode.com/gh_mirrors/bi/BioAge BioAge生物年龄计算工具包是一款基于R语言开发的强…...

收藏|2026年AI大模型就业爆发!岗位暴涨12倍、月薪6W+,小白零基础入门指南

2026年&#xff0c;AI已从“科技热点”彻底变为职场“刚需赛道”&#xff01;脉脉高聘人才智库最新发布的《2026年1-2月中高端人才求职招聘洞察》&#xff0c;用硬核数据揭示行业真相&#xff1a;AI人才成招聘市场顶流&#xff0c;岗位量、薪资双双爆发式增长。尤其对零基础小白…...

AI 应用原型开发阶段利用 Taotoken 快速进行多模型效果对比

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 AI 应用原型开发阶段利用 Taotoken 快速进行多模型效果对比 在构建一个 AI 应用的原型时&#xff0c;开发者常常面临一个核心问题&…...

深入解析NxDumpTool:Switch游戏文件系统提取的终极指南 [特殊字符]

深入解析NxDumpTool&#xff1a;Switch游戏文件系统提取的终极指南 &#x1f3ae; 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com…...

收藏干货|2026年程序员转型大模型指南,8个高薪岗位小白也能入局

分享一则身边真实职场经历&#xff0c;想必能戳中当下不少陷入职业迷茫的开发从业者。 同窗老友深耕Java后端开发整整六年&#xff0c;常年扎根业务开发模块&#xff0c;算得上行业内经验老道的技术老手。可从去年年初开始&#xff0c;他的职业焦虑感愈发强烈。传统业务开发同质…...

如何用嘎嘎降AI处理金融学论文:金融学毕业论文降AI4.8元完整操作教程

如何用嘎嘎降AI处理金融学论文&#xff1a;金融学毕业论文降AI4.8元完整操作教程 第一次用降AI工具有很多不确定——传什么格式、选哪个模式、怎么验收。 这篇教程把金融学论文降AI教程的常见问题都覆盖了&#xff0c;主要基于嘎嘎降AI&#xff08;www.aigcleaner.com&#x…...

抖音批量下载工具:免费获取无水印视频的终极解决方案

抖音批量下载工具&#xff1a;免费获取无水印视频的终极解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

别再只会用spline了!MATLAB csape函数详解:从自然边界到夹持边界的实战选择

MATLAB csape函数深度解析&#xff1a;从自然边界到夹持边界的工程实践 在工程仿真和科学计算领域&#xff0c;数据插值是一个永恒的话题。当我们面对一组离散的实验数据或仿真结果时&#xff0c;如何构建一条光滑的曲线来准确反映数据背后的物理规律&#xff1f;这个问题困扰…...

Arduino打地鼠游戏机:从74HC595矩阵驱动到状态机编程全解析

1. 项目概述&#xff1a;用Arduino复刻经典打地鼠游戏作为一个电子爱好者&#xff0c;我总想把手头的Arduino和各种元器件玩出点新花样。这次&#xff0c;我决定挑战一个经典街机项目——电子打地鼠。市面上虽然有现成的玩具&#xff0c;但自己从头设计、画板、编程&#xff0c…...