最近公司有个大屏,需要做一个实时报警的功能,这就用到了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中把子模块的路径配置进去!!!!!!下面是我网关和配置的截图
切记 一定要加!!!
做完这些就可以在业务代码上直接应用了
我这就大概写个例子
接下来让我们测试一下,先添加信息
文章来源:https://www.toymoban.com/news/detail-502598.html
成功收到,大功告成文章来源地址https://www.toymoban.com/news/detail-502598.html
到了这里,关于SpringCloudAlibaba 应用webSocket,解决连接成功后会立刻断开等问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!