当前位置: 首页 > 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消息传输。

在这里插入图片描述

http://www.lryc.cn/news/69948.html

相关文章:

  • BurpSuite—-Target模块(目标模块)
  • 部门来了个测试开发,听说是00后,上来一顿操作给我看呆了...
  • Godot引擎 4.0 文档 - 入门介绍 - Godot简介
  • 数据通信基础 - 码元速率 和 数据速率 详解
  • 听我一句劝,别去外包,干了三年,废了....
  • 全域兴趣电商:国货品牌的新策略、新玩法
  • 嵌入式 Linux 入门(十一、make 和 MakeFile)
  • Serverless冷扩机器在压测中被击穿问题 | 京东云技术团队
  • 数仓中指标-标签,维度-度量,自然键-代理键等各名词深度解析
  • Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(Mono)
  • C++笔试笔记2
  • 手写Spring框架
  • 微服务学习笔记--(Docker)
  • ChatGPT 国内版免费
  • 推荐5个免费好用的UI模板网站!
  • linux 安装 maven 3.8 版本
  • Redis的三种持久化策略及选取建议
  • 力扣LCP 33. 蓄水
  • 内网渗透(八十一)之搭建Exchange服务器
  • web缓存Squid代理服务
  • vue实现聊天框自动滚动
  • 项目中遇到的一些问题总结(六)
  • Linux线程5——生产消费模型
  • Vue + Springboot 文件上传项目笔记(一)
  • 【华为OD机试真题2023B卷 JAVA】座位调整
  • Python 学习 2022.08.28 周日
  • WEB自动化测试,一定得掌握的8个核心知识点
  • 期末复习总结!!【MySQL】库和表的基本操作 + 增删改查CURD
  • 线上问题处理案例:出乎意料的数据库连接池 | 京东云技术团队
  • 有了 IP 地址,为什么还要用 MAC 地址?