1. 程式人生 > >websocket開啟多個頁面訪問同一個連線會失效的問題解決方法

websocket開啟多個頁面訪問同一個連線會失效的問題解決方法

當時開發時用websocket和mq實現從微信裡取資料使用mq接收在傳送到websocket,因為沒有用過websocket遇到了很多坑,查找了很多方法也沒有解決掉,現在把我解決的方法分享給大家
1.我使用的是springboot微服務框架實現的websocket,需要匯入jar:

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

如果你是使用ServerEndpoint這個註解實現的話,問題就來了
在這裡插入圖片描述
我們做完要訪問這個連線的時候,控制檯會報一個錯誤

在這裡插入圖片描述
這是因為我們少加了一個@Component(“WebSocketLast”)註解
在這裡插入圖片描述


出現get請求錯誤的原因是我們傳送一個請求連線的時候預設是一個get請求,但是我們要訪問的不是一個controller類,對映不到方法上,
@component (把普通pojo例項化到spring容器中,相當於配置檔案中的

泛指各種元件,就是說當我們的類不屬於各種歸類的時候(不屬於@Controller、@Services等的時候),我們就可以使用@Component來標註這個類。這樣就不會報錯

當開啟多個瀏覽器訪問同一個頁面的時候,心跳測試會無法返回open給前端,長連線會失效,比如:
在這裡插入圖片描述
在網上查了沒有解決的辦法,這個主要和單例和多例有關係,我們都知道spring是單例模式的,
singleton 表示在spring容器中的單例,通過spring容器獲得該bean時總是返回唯一的例項
prototype表示每次獲得bean都會生成一個新的物件
兩個頁面訪問websocket的時候總是換掉上一次的路徑,所以上一次的會失效,只要在websocket類上面加上@Scope註解,註解裡填上prototype就可以實現多頁面長連線
在這裡插入圖片描述