欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何解決websocket開啟多個(gè)頁面訪問同一個(gè)連接會(huì)失效的問題

 更新時(shí)間:2024年09月19日 15:21:52   作者:養(yǎng)歌  
使用WebSocket時(shí),若多個(gè)頁面訪問同一個(gè)WebSocket連接可能會(huì)導(dǎo)致連接失效,遇到這個(gè)問題時(shí),可以通過在SpringBoot中使用@ServerEndpoint注解并添加@Component來解決,出現(xiàn)連接錯(cuò)誤通常是因?yàn)閃ebSocket連接接收到的是一個(gè)GET請(qǐng)求

websocket開啟多個(gè)頁面訪問同一個(gè)連接會(huì)失效

當(dāng)時(shí)開發(fā)時(shí)用websocket和mq實(shí)現(xiàn)從微信里取數(shù)據(jù)使用mq接收在發(fā)送到websocket,因?yàn)闆]有用過websocket遇到了很多坑,查找了很多方法也沒有解決掉,現(xiàn)在把我解決的方法分享給大家

我使用的是springboot微服務(wù)框架實(shí)現(xiàn)的websocket

需要導(dǎo)入jar:

  • org.springframework.boot
  • spring-boot-starter-websocket

如果你是使用ServerEndpoint這個(gè)注解實(shí)現(xiàn)的話,問題就來了

我們做完要訪問這個(gè)連接的時(shí)候,控制臺(tái)會(huì)報(bào)一個(gè)錯(cuò)誤

這是因?yàn)槲覀兩偌恿艘粋€(gè)@Component(“WebSocketLast”)注解

出現(xiàn)get請(qǐng)求錯(cuò)誤的原因是我們發(fā)送一個(gè)請(qǐng)求連接的時(shí)候默認(rèn)是一個(gè)get請(qǐng)求,但是我們要訪問的不是一個(gè)controller類,映射不到方法上,

@component (把普通pojo實(shí)例化到spring容器中,相當(dāng)于配置文件中的
)

泛指各種組件,就是說當(dāng)我們的類不屬于各種歸類的時(shí)候(不屬于@Controller、@Services等的時(shí)候),我們就可以使用@Component來標(biāo)注這個(gè)類。這樣就不會(huì)報(bào)錯(cuò)

當(dāng)打開多個(gè)瀏覽器訪問同一個(gè)頁面的時(shí)候,心跳測試會(huì)無法返回open給前端,長連接會(huì)失效,比如:

在網(wǎng)上查了沒有解決的辦法,這個(gè)主要和單例和多例有關(guān)系,我們都知道spring是單例模式的,

  • singleton表示在spring容器中的單例,通過spring容器獲得該bean時(shí)總是返回唯一的實(shí)例
  • prototype表示每次獲得bean都會(huì)生成一個(gè)新的對(duì)象

兩個(gè)頁面訪問websocket的時(shí)候總是換掉上一次的路徑,所以上一次的會(huì)失效,只要在websocket類上面加上@Scope注解,注解里填上prototype就可以實(shí)現(xiàn)多頁面長連接

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論