最近公司有個(gè)大屏,需要做一個(gè)實(shí)時(shí)報(bào)警的功能,這就用到了webSocket技術(shù),這個(gè)帖子就用來(lái)記錄學(xué)習(xí)過程中的遇到的問題,如下是想要達(dá)到的效果圖
?1.第一步肯定是先導(dǎo)入依賴
<!-- websocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
這里記錄第一個(gè)坑點(diǎn),就是可能有的小伙伴會(huì)在啟動(dòng)的時(shí)候報(bào)錯(cuò),這個(gè)是因?yàn)閣ebsocket和tomcat有沖突,需要取消tomcat和測(cè)試的依賴,因?yàn)槲矣玫氖莚uoyicloudplus 所以取消了common-web 和 test的依賴,項(xiàng)目就能順利啟動(dòng)了~
2.編寫config和方法類
這步都很簡(jiǎn)單,我是直接用的注解
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 消息有新推送,連接總數(shù){}",webSocketSet.size());
}
@OnClose
public void onClose( ){
webSocketSet.remove(this);
log.info("webSocket 有連接斷開,連接總數(shù){}",webSocketSet.size());
}
@OnMessage
public void onMessage(String message ){
log.info("收到客戶端發(fā)來(lái)的消息{}",message);
}
/**
* 廣播發(fā)送消息
* @param message 信息內(nèi)容
*/
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();
}
}
大概寫完這些就可以愉快的應(yīng)用websocket的 大概有的人可能會(huì)遇到我的問題,就是可以連接成功,但是會(huì)立刻斷開,這個(gè)問題也困惑了我兩天,終于在摸魚中無(wú)意間發(fā)現(xiàn)了問題。就是我的這個(gè)框架是有鑒權(quán)的,但是大屏是不會(huì)登錄的,我當(dāng)時(shí)只是在gateway白名單上加了頭路徑,還需要在SecurityConfiguration中把子模塊的路徑配置進(jìn)去?。。。。。∠旅媸俏揖W(wǎng)關(guān)和配置的截圖
切記 一定要加?。?!
做完這些就可以在業(yè)務(wù)代碼上直接應(yīng)用了
?我這就大概寫個(gè)例子
?
?接下來(lái)讓我們測(cè)試一下,先添加信息
?
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-502598.html
?成功收到,大功告成文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-502598.html
到了這里,關(guān)于SpringCloudAlibaba 應(yīng)用webSocket,解決連接成功后會(huì)立刻斷開等問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!