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

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

一、概述


在上一节 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 ,如下:



4909b1f49780431d8d9ba2fe3cbb5ddf.png

点击连接后,显示连接成功,直接发送消息即可。可以看到,客户端发什么,服务端就响应什么

33c53218dc8943008f5185b094a4e2bc.png


三、总结

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


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


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


相关文章
|
缓存 前端开发 JavaScript
【第22期】 一文读懂前端调试利器whistle
【第22期】 一文读懂前端调试利器whistle
622 0
|
前端开发 API
服务端渲染-nextjs如何发起请求
服务端渲染-nextjs如何发起请求
1299 0
|
机器人 Shell Linux
ROS_LOCALHOST_ONLY变量
ROS_LOCALHOST_ONLY变量
608 0
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
2259 3
|
监控 前端开发 算法
前端性能体系建设与优化思路
Dev Better技术沙龙-前端性能及新技术实践 学习笔记总结
632 0
|
存储 缓存 监控
2024年春招小红书前端实习面试题分享
春招已经拉开帷幕啦! 春招的拉开,意味着新一轮的求职大战已经打响,希望每位求职者都能充分准备,以最佳的状态迎接挑战,找到心仪的工作,开启职业生涯的新篇章。祝愿每位求职者都能收获满满,前程似锦!
431 3
|
JSON 安全 Java
JWT令牌技术
JSON Web Token (JWT) 是一种安全的、自包含的信息传输格式,常用于身份验证和信息交换。它由Header、Payload和Signature三部分组成,其中Signature用于验证消息完整性和发送者身份。JWT包含用户信息,服务器登录后发送给客户端,客户端使用JWT证明身份访问受保护资源。在Java项目中,可以使用`java-jwt`库进行JWT的生成和解析。要开始使用JWT,需在Maven或Gradle中添加相关依赖,并实现生成和解析JWT的方法。此外,文中还提供了一个简单的Java Web应用示例,展示如何在用户登录和访问受保护资源时使用JWT。
667 0
|
JSON 数据格式
Echarts统计图x轴实现拉伸滑动
Echarts统计图x轴实现拉伸滑动
465 1
|
前端开发 JavaScript 中间件
【第38期】一文学会React Mbox状态管理
【第38期】一文学会React Mbox状态管理
812 0

热门文章

最新文章