如何解決websocket開啟多個頁面訪問同一個連接會失效的問題
websocket開啟多個頁面訪問同一個連接會失效
當(dāng)時開發(fā)時用websocket和mq實現(xiàn)從微信里取數(shù)據(jù)使用mq接收在發(fā)送到websocket,因為沒有用過websocket遇到了很多坑,查找了很多方法也沒有解決掉,現(xiàn)在把我解決的方法分享給大家
我使用的是springboot微服務(wù)框架實現(xiàn)的websocket
需要導(dǎo)入jar:
org.springframework.bootspring-boot-starter-websocket
如果你是使用ServerEndpoint這個注解實現(xiàn)的話,問題就來了

我們做完要訪問這個連接的時候,控制臺會報一個錯誤

這是因為我們少加了一個@Component(“WebSocketLast”)注解

出現(xiàn)get請求錯誤的原因是我們發(fā)送一個請求連接的時候默認(rèn)是一個get請求,但是我們要訪問的不是一個controller類,映射不到方法上,
@component (把普通pojo實例化到spring容器中,相當(dāng)于配置文件中的 )
泛指各種組件,就是說當(dāng)我們的類不屬于各種歸類的時候(不屬于@Controller、@Services等的時候),我們就可以使用@Component來標(biāo)注這個類。這樣就不會報錯
當(dāng)打開多個瀏覽器訪問同一個頁面的時候,心跳測試會無法返回open給前端,長連接會失效,比如:

在網(wǎng)上查了沒有解決的辦法,這個主要和單例和多例有關(guān)系,我們都知道spring是單例模式的,
singleton表示在spring容器中的單例,通過spring容器獲得該bean時總是返回唯一的實例prototype表示每次獲得bean都會生成一個新的對象
兩個頁面訪問websocket的時候總是換掉上一次的路徑,所以上一次的會失效,只要在websocket類上面加上@Scope注解,注解里填上prototype就可以實現(xiàn)多頁面長連接

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot項目打包成war包并部署在tomcat上運行的操作步驟
我們開發(fā) SpringBoot 項目有時我們會需要打包成 war 包,放入外置的 Tomcat 中進(jìn)行運行,或者使用工具idea直接啟動,便于開發(fā)調(diào)試,本文給大家分享SpringBoot項目打包成war包并部署在tomcat上運行的操作步驟,感興趣的朋友一起看看吧2024-03-03
Java(Springboot)項目調(diào)用第三方WebService接口實現(xiàn)代碼
這篇文章主要介紹了如何使用Java調(diào)用WebService接口,傳遞XML參數(shù),獲取XML響應(yīng),并將其解析為JSON格式,文中詳細(xì)描述了WSDL文檔的使用、HttpClientBuilder和Apache?Axis兩種調(diào)用方式的具體實現(xiàn)步驟,需要的朋友可以參考下2025-02-02
Quarkus集成open api接口使用swagger ui展示
這篇文章主要為大家介紹了Quarkus集成open?api接口使用swagger?ui的展示示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程
這篇文章給大家介紹了SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細(xì)過程,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
Java.toCharArray()和charAt()的效率對比分析
這篇文章主要介紹了Java.toCharArray()和charAt()的效率對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Maven基礎(chǔ):錯誤對應(yīng):was cached in the local&nbs
這篇文章主要介紹了Maven基礎(chǔ):錯誤對應(yīng):was cached in the local repository的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

