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 技术。无论你是初学者还是有一定经验的开发者,本文都能为你提供有价值的信息和指导。
|
6月前
|
JavaScript 网络协议 前端开发
【Nodejs】WebSocket 全面解析+实战演练——(Nodejs实现简易聊天室)
【Nodejs】WebSocket 全面解析+实战演练——(Nodejs实现简易聊天室)
618 0
|
移动开发 前端开发 网络协议
WebSocket从入门到实战
WebSocket从入门到实战
280 0
EMQ
|
传感器 缓存 安全
MQTT 协议入门:基础知识和快速教程
本文将通过讲解与演示向读者展示 MQTT 协议的入门使用流程,开发者可以通过本文以更简单的方式理解 MQTT 相关概念,快速开始 MQTT 服务及应用的开发。
EMQ
3463 0
MQTT 协议入门:基础知识和快速教程
|
监控 网络协议 数据可视化
Websocket原理和实践
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
390 0
Websocket原理和实践
|
前端开发 JavaScript Java
【面试题精讲】什么是websocket?如何与前端通信?
【面试题精讲】什么是websocket?如何与前端通信?
WebSocket学习笔记 -- 环境搭建2
WebSocket学习笔记 -- 环境搭建2
|
JSON JavaScript 数据格式
WebSocket学习笔记 -- 环境搭建1
WebSocket学习笔记 -- 环境搭建1
124 0
|
前端开发 API
websocket使用实践代码指南
websocket使用实践代码指南
267 0
|
移动开发 JavaScript 前端开发
WebSocket 详解教程 上
WebSocket 详解教程 上
525 0
WebSocket 详解教程    上