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

最近公司有个大屏,需要做一个实时报警的功能,这就用到了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中把子模块的路径配置进去!!!!!!下面是我网关和配置的截图

切记 一定要加!!!

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

 我这就大概写个例子

 

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

 

 

 成功收到,大功告成

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值