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消息传输。


相关文章
|
2月前
|
网络协议 前端开发 JavaScript
WebSocket 教程汇总指南,从入门到熟练
本文将带你从零开始,逐步掌握 WebSocket 的基本概念、实现方法和应用场景,通过一系列详细的教程和实践案例,帮助你从入门到熟练地使用 WebSocket 技术。无论你是初学者还是有一定经验的开发者,本文都能为你提供有价值的信息和指导。
|
移动开发 网络协议 安全
WebSocket详解 - 基础概念
WebSocket详解 - 基础概念
125 1
|
移动开发 前端开发 网络协议
WebSocket从入门到实战
WebSocket从入门到实战
284 0
|
监控 网络协议 数据可视化
Websocket原理和实践
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
393 0
Websocket原理和实践
|
前端开发 JavaScript Java
【面试题精讲】什么是websocket?如何与前端通信?
【面试题精讲】什么是websocket?如何与前端通信?
|
前端开发 API
websocket使用实践代码指南
websocket使用实践代码指南
271 0
WebSocket学习笔记 -- 环境搭建2
WebSocket学习笔记 -- 环境搭建2
|
JSON JavaScript 数据格式
WebSocket学习笔记 -- 环境搭建1
WebSocket学习笔记 -- 环境搭建1
126 0
|
移动开发 JavaScript 网络协议
常用的Websocket技术一览
Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,当然也支持客户端发送数据到服务端。通常用来社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、资讯自动更新等场景,那么今天就简单聊一下在Java开发中对Websocket的技术选型。
|
移动开发 前端开发 网络协议
前端如何实现即时通讯(websocket)
前端如何实现即时通讯(websocket)
前端如何实现即时通讯(websocket)