Springboot框架集成Websocket通信方式

Websocket实现了“服务器”主动向“客户端”发送数据,改变了以往通过轮询、长轮训、长连接等方式获取服务器端数据的方式。

一、Websocket有三种不同的用场景,单播、广播和组播;

(一)、单播(Unicast)

单播是客户端与服务器之间的“一对一”的连接。是在一个单个的发送者和一个接收者之间通过进行的通信。

(二)、广播(Broadcast)

广播是服务器与客户端“一对所有”的连接方式。广播意味着服务器向每一个成员都投递一份数据包,不论这些主机是否乐于接收该数据包。

(三)、组播(Multicast)

组播是在服务端和客户端之间实现“一对一组”的连接方式。服务器可以向某些用户发送特定信息。

二、Springboot框架集成Websocket

(一)、原生注解

引入Websocket包后,重写WsServerEndpoint配置类,内置方法包括Onopen、Onclose和OnError等方法。服务端发送消息必须通过 Session 类,通常是在@OnOpen 方法中,当连接成功后把 session 存入 Map 的 value,key 是与 session 对应的用户标识,当要发送的时候通过 key 获得 session 再发送,通过session.getBasicRemote_().sendText(_) 来对客户端发送消息。

(二)、Spring封装

引入Websocket包后,通过继承 TextWebSocketHandler 类并覆盖相应方法,可以对 Websocket 的事件进行处理。重写的方法与原生注解中有一一对应。

(三)、Tio

Tio-websocket-server 是基于Tio的Websocket协议的实现,也是通过实现接口覆盖方法来进行事件处理,实现的接口是IWsMsgHandlerTio-websocket-server无缝对接点对点发送消息,群组消息,客户端连接维护等。所以,基于 tio-websocket-server 的 starter,在使用起来不必关心连接的维护问题,只要做好业务处理即可。在拥有了Tio的便利性的同时又可以使用Spring的各种特性,极大的简化了Spring + Websocket 的开发难度。

(四)Stomp

WebSocket 协议是基于 TCP 的一种新的网络协议,实现双工通讯,但是 Websocket 没有规范Payload (除控制信息外的有效载体)格式,可以是文本数据,也可以发送二进制数据,需要我们自己定义。而我们可以使用 Stomp 协议去规范传输数据格式标准。

Stomp是通过实现 WebSocketMessageBrokerConfigurer 接口和加上@EnableWebSocketMessageBroker来进行 stomp 的配置与注解扫描。一些方法的重写可以实现广播、消息发送等功能。

综上所述,实现Websocket的方式有四种,其中原生Websocket需要自己做更多的配置和重写代码。Spring集成与原生的类似,同样需要自己做配置和重写代码,包括重写实现类,Session的管理和拦截器的布置等。在内网内使用,业务固定,只是简单的服务器双向通信,推荐 Stomp 的形式,因为Stomp 更容易规范使用。

  • 遇到的问题

服务如果要主动发送消息给客户端一定要用到 session。而 session 是不跨 Jvm 的。如果有多台服务器,在 http 请求的情况下,可以通过把 session 放入缓存中间件中来共享解决这个问题。但是 Websocket不可以,因为Websocket的 session 是不能序列化的。

目前可以通过 redis 订阅广播的形式解决如上问题,在本地放个 map 保存请求的 session。也就是说每台服务器都会保存与他连接的 session 于本地。然后发消息通过 redis 的订阅机制。服务器要发消息的时候,通过 redis 广播这条消息,所有订阅的服务都会收到这个消息,然后服务器再发送消息给客户端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用Spring Boot集成WebSocket,方法如下: 1. 在项目中添加WebSocket依赖,例如: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 在Spring Boot项目的主类中添加@EnableWebSocket注解,例如: ``` @SpringBootApplication @EnableWebSocket public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. 实现WebSocketConfigurer接口,配置WebSocket,例如: ``` @Configuration public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new WebSocketHandler(), "/websocket") .setAllowedOrigins("*"); } } ``` 4. 实现WebSocketHandler接口,实现WebSocket通信,例如: ``` @Component public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler { @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { // 实现WebSocket通信 } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // WebSocket连接建立成功 } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { // WebSocket传输错误处理 } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { // WebSocket连接关闭处理 } @Override public boolean supportsPartialMessages() { return false; } } ``` 以上就是Spring Boot集成WebSocket的基本步骤,可以根据实际需求进行扩展。 ### 回答2: Spring Boot是一个开源的Java框架,它可以帮助我们快速搭建基于Java的应用程序。WebSocket是一种在Web浏览器和服务器之间进行全双工通信的技术,它能够实现实时的数据传输。 要在Spring Boot集成WebSocket,我们需要进行以下几个步骤: 1. 添加依赖:在项目的pom.xml文件中,添加Spring Boot WebSocket的依赖,例如: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建WebSocket配置类:创建一个配置类,使用@EnableWebSocket注解开启WebSocket功能,并实现WebSocketConfigurer接口。在configureWebSocketTransport方法中,注册我们的WebSocket处理器。 3. 创建WebSocket处理器:创建一个类,实现WebSocketHandler接口,并重写其中的方法,例如onOpen、onClose、onMessage等。这些方法分别在WebSocket连接建立、关闭和收到消息时被调用,我们可以在这些方法中编写自己的业务逻辑。 4. 配置消息代理:在WebSocket配置类中,使用@EnableWebSocketMessageBroker注解开启消息代理功能,同时重写其中的方法,配置消息代理的前缀和目的地。这样我们就可以使用消息代理来实现广播和点对点的消息发送。 5. 创建WebSocket端点:在配置类中,使用registerWebSocketHandlers方法,注册我们的WebSocket处理器和端点,并设置允许通过CORS跨域访问。 通过以上几个步骤,我们就可以在Spring Boot中成功集成WebSocket。在前端页面中,我们可以使用JavaScript的WebSocket API来与后端建立连接,并进行实时的双向通信。同时,Spring Boot提供了多种内置的消息代理方式,可以更方便地实现消息的发送和接收。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_文和_

感觉对您有用,可以来点鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值