大屏的接口开发一: 基于SpringBoot的webSocket数据推送

本文介绍如何利用SpringBoot集成WebSocket实现实时数据推送,适用于高实时性需求的大屏展示项目。通过握手拦截器获取userId绑定到会话,支持全局和指定用户消息推送。详细步骤包括pom.xml的配置、握手拦截器、WebSocket配置类和处理类的实现,最后通过日志验证消息推送功能。
摘要由CSDN通过智能技术生成

在实际的项目开发中,需要用到大屏的展示,大屏的项目对于数据的实时性要求比较高,因此不能用http的接口,需要长连接的数据推送,大屏的免手动刷新,实现数据的同步变动展示。这里主要使用SpringBoot集成webSocket实现数据的全局发送,指定用户发送,值得注意的是这里使用了Spring自带的握手拦截器获取前端传来的userId,与webSocket的会话进行绑定,用于长连接的身份区分。如下是设计思路和代码实现。

1. SpringBoot整合WebSocket(pom.xml引入相关的jar包)

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

2.重写实现Spring框架的握手拦截器
这里主要是通过拦截webSocket的请求url,获取链接上的uid,放到map中,用于识别会话身份,方便做指定的消息推送。(如请求ws://localhost:8080/ws?uid=11111111)

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * 在Spring中提供了websocket拦截器,
 */
@Slf4j
@Component
public class MyHandshakeInterceptor implements HandshakeInterceptor {
   


    /**
     * 握手之前,若返回false,则不建立连接
     */
    @Override
    public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
   
        //将用户id放入socket处理器的会话(webSocketSession)中
        ServletServerHttpRequest request = (ServletServerHttpRequest) serverHttpRequest;
        System.out.println(request.getURI());
        HttpServletRequest servletRe
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

潇潇雨歇_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值