springboot 集成websocket

本文介绍如何利用SpringBoot实现WebSocket服务,通过三个步骤完成:添加依赖、编写服务端业务逻辑及配置类。文中提供了示例代码及在线测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

websocket 协议,作为对于http 的扩展,解决只能客户端发起请求,服务端被动响应的协议,全双工通信,非常好用,这里说一下springboot 中的实现

具体实现很简单,只有以下三步

添加pom 依赖

无需指定websocket 版本,默认使用springboot 版本

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

添加server 端业务逻辑

这里只实现个简单功能,收到客户端消息后,将收到的内容大写后,再返回给客户端

@Slf4j
@Component
@ServerEndpoint("/info")    // 指定websocket 连接的url
public class WebSocketServer {
    @OnOpen
    public void onOpen(Session session) {
        log.info("客户端:{}连接成功",session.getId());
    }

    @OnClose
    public void onClose(Session session) {
        log.info("客户端:{}连接断开",session.getId());

    }

    @OnMessage
    public String onMsg(String message,Session session) {
        log.info("从客户端:{} 收到<--:{}", session.getId(),message);

        String send=message.toUpperCase();
        String result="客户:%s您好,来自server 的消息:%s";
        result = String.format(result, session.getId(), send);
        return "来自server 的消息:" + result;
    }

}

添加websocket 配置类

配置类非常简单,将对象交给spring 容器进行处理

@Slf4j
@Configuration
@EnableWebSocket
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpoint(){
        return new ServerEndpointExporter();
    }

}

功能测试

使用在线测试网站

https://www.dute.org/websocket
http://www.websocket-test.com/

测试截图如下,可以正常使用

  • 客户端界面1

在这里插入图片描述

  • 客户端界面2

在这里插入图片描述

  • 服务端打印内容
2022-05-29 12:13:31.530  INFO 16776 --- [           main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getProductByIdUsingGET_2
2022-05-29 12:13:31.532  INFO 16776 --- [           main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getProductByIdUsingGET_3
2022-05-29 12:13:31.556  INFO 16776 --- [           main] com.kk.MaicaiApplication                 : Started MaicaiApplication in 2.922 seconds (JVM running for 3.889)
2022-05-29 12:13:52.231  INFO 16776 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-05-29 12:13:52.232  INFO 16776 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2022-05-29 12:13:52.233  INFO 16776 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
2022-05-29 12:13:52.259  INFO 16776 --- [nio-8080-exec-1] com.kk.websocket.WebSocketServer         : 客户端:0连接成功
2022-05-29 12:14:04.214  INFO 16776 --- [nio-8080-exec-4] com.kk.websocket.WebSocketServer         : 从客户端:0 收到<--:aaaa
2022-05-29 12:14:17.699  INFO 16776 --- [nio-8080-exec-3] com.kk.websocket.WebSocketServer         : 客户端:1连接成功
2022-05-29 12:14:23.867  INFO 16776 --- [nio-8080-exec-2] com.kk.websocket.WebSocketServer         : 从客户端:1 收到<--:bbbb
2022-05-29 12:14:28.288  INFO 16776 --- [nio-8080-exec-9] com.kk.websocket.WebSocketServer         : 客户端:1连接断开
2022-05-29 12:14:31.624  INFO 16776 --- [nio-8080-exec-6] com.kk.websocket.WebSocketServer         : 客户端:0连接断开
SpringBoot集成WebSocket可以使用Spring框架提供的WebSocket API来实现。在SpringBoot中,使用WebSocket需要进行以下几个步骤: 1. 添加依赖:在pom.xml文件中添加spring-boot-starter-websocket依赖。 2. 创建WebSocket配置类:创建一个WebSocket配置类,用于配置WebSocket相关的参数,如注册EndPoint、消息编解码器、拦截器等。 3. 创建EndPoint:创建一个WebSocket的EndPoint类,用于处理WebSocket连接、消息发送、关闭等操作。可以通过实现Spring提供的WebSocketHandler接口或者继承TextWebSocketHandler来实现。 4. 添加拦截器:可以添加自定义的拦截器,用于处理WebSocket连接建立、消息发送等事件。 5. 配置WebSocket消息代理:使用Spring提供的消息代理,可以实现WebSocket消息的广播和点对点传递。 以下是一个简单的SpringBoot集成WebSocket的示例代码: 1. 添加依赖 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建WebSocket配置类 ``` @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler") .addInterceptors(new WebSocketInterceptor()); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } ``` 3. 创建EndPoint ``` public class MyHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 处理连接建立事件 } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理消息事件 } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { // 处理连接关闭事件 } } ``` 4. 添加拦截器 ``` public class WebSocketInterceptor extends HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { // 处理连接建立前事件 return true; } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { // 处理连接建立后事件 } } ``` 5. 配置WebSocket消息代理 ``` @Configuration @EnableWebSocketMessageBroker public class WebSocketMessageBrokerConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.enableSimpleBroker("/topic"); registry.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/myEndpoint") .setAllowedOrigins("*") .withSockJS(); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿雷由

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值