WebSocket使用SockJS原來可以這么簡單(附Spring實現完整實例)


基於 SockJS 的 WebSocket
在學習 《Spring實戰》 第18章的時候才知道,原來在不支持WebSocket的情況下,也可以很簡單地實現WebSocket的功能的,方法就是使用 SockJS。它會優先選擇WebSocket進行連接,但是當服務器或客戶端不支持WebSocket時,會自動在 XHR流、XDR流、iFrame事件源、iFrame HTML文件、XHR輪詢、XDR輪詢、iFrame XHR輪詢、JSONP輪詢 這幾個方案中擇優進行連接。

幸運的是,我們不需要知道這些方案都代表什么,只需要簡單地設置就可以使用了。

服務端
在啟動WebSocket的配置中,你需要做的所有事情就是加上 withSockJS()

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
// withSockJS 聲明啟用支持 sockJS
webSocketHandlerRegistry.addHandler(marcoHandler(), "/echo").withSockJS();
}

客戶端
在客戶端需要引入SockJS庫,然后把 new WebSocket(url); 替換成 new SockJS(url);

SockJS類和WebSocket類是兼容的,所以可以直接替換

<script type="text/javascript" src="/resources/js/sockjs-1.0.0.min.js"></script>
var sock = new SockJS(url);

需要做的事情就是這么多

效果展示
支持WebSocket
當瀏覽器和服務器都支持 websocket 的時候,直接使用websocket連接

 

 

 

不支持WebSocket
不支持WebSocket的場景有:

瀏覽器不支持
Web容器不支持,如tomcat7以前的版本不支持WebSocket
防火牆不允許
Nginx沒有開啟WebSocket支持
當遇到不支持WebSocket的情況時,SockJS會嘗試使用其他的方案來連接,剛開始打開的時候因為需要嘗試各種方案,所以會阻塞一會兒,之后可以看到連接有異常,那就是嘗試失敗的情況。

為了測試,我使用Nginx做反向代理,把www.test.com指到項目啟動的端口上,然后本地配HOST來達到模擬真實場景的效果。因為Nginx默認是不支持WebSocket的,所以這里模擬出了服務器不支持WebSocket的場景。

 

 

 

完整實例
完整的實例已經上傳到GitHub上,你可以查看。如果對你有幫助,記得 Star 哦!

https://github.com/dadiyang/springws
————————————————
版權聲明:本文為CSDN博主「dadiyang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/dadiyang/article/details/83715569


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM