SpringCloudAlibaba 应用webSocket,解决连接成功后会立刻断开等问题

文章讲述了在公司项目中使用WebSocket技术实现大屏实时报警功能的过程。作者遇到了WebSocket连接启动时的冲突问题,解决了Tomcat和websocket的依赖冲突,并详细记录了配置和编码步骤,包括注解的使用。在开发过程中,连接成功后立即断开的问题是由于鉴权设置不完整导致的,需要在SecurityConfiguration中添加子模块路径。最终,作者成功实现了功能并进行了测试。

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

最近公司有个大屏,需要做一个实时报警的功能,这就用到了webSocket技术,这个帖子就用来记录学习过程中的遇到的问题,如下是想要达到的效果图

 1.第一步肯定是先导入依赖

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

这里记录第一个坑点,就是可能有的小伙伴会在启动的时候报错,这个是因为websocket和tomcat有冲突,需要取消tomcat和测试的依赖,因为我用的是ruoyicloudplus 所以取消了common-web 和 test的依赖,项目就能顺利启动了~

2.编写config和方法类

这步都很简单,我是直接用的注解

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * @author nxy
 */
@Component
@ServerEndpoint(value = "/websocket",subprotocols = {"protocol"})
@Slf4j
public class WebSocket {
    private Session session;

    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();

    @OnOpen
    public void onOpen(Session session){
        this.session=session;
        webSocketSet.add(this);
        log.info("webSocket 消息有新推送,连接总数{}",webSocketSet.size());

    }

    @OnClose
    public void onClose( ){
        webSocketSet.remove(this);
        log.info("webSocket 有连接断开,连接总数{}",webSocketSet.size());

    }

    @OnMessage
    public void onMessage(String message ){
        log.info("收到客户端发来的消息{}",message);

    }

    /**
     * 广播发送消息
     * @param message 信息内容
     */
    public void sendMessage(String message){
        for(WebSocket webSocket:webSocketSet){
            log.info("广播消息{}",message);

            try {
                webSocket.session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * websocket 配置
 *
 * @author ruoyi
 */
@Configuration
public class WebSocketConfig
{
    @Bean
    public ServerEndpointExporter serverEndpointExporter()
    {
        return new ServerEndpointExporter();
    }
}

大概写完这些就可以愉快的应用websocket的 大概有的人可能会遇到我的问题,就是可以连接成功,但是会立刻断开,这个问题也困惑了我两天,终于在摸鱼中无意间发现了问题。就是我的这个框架是有鉴权的,但是大屏是不会登录的,我当时只是在gateway白名单上加了头路径,还需要在SecurityConfiguration中把子模块的路径配置进去!!!!!!下面是我网关和配置的截图

切记 一定要加!!!

做完这些就可以在业务代码上直接应用了

 我这就大概写个例子

 

 接下来让我们测试一下,先添加信息

 

 

 成功收到,大功告成

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值