共計 1082 個字符,預計需要花費 3 分鐘才能閱讀完成。
這篇文章給大家分享的是有關如何通過 WebSocket 實現瀏覽器與服務器的通信的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
現如今有個需求,基于 websocket 實現瀏覽器與服務器的通信。由于之前沒有使用過 websocket,在網上大致搜索了一圈,尋找 websocket 的集成方案。網上尋找的方案大致如下:
1. 基于 spring 的方式實現,加入 spring-websocket 依賴,加注解,配置相應的攔截器和路徑;
2. 基于 springBoot 的方式,本質上還是基于 spring;
3. 基于 J2EE 應用服務器,好像從 tomcat7 開始有提供 websocket 支持,直接用 @WebsocketEnd 可實現,該注解由 servlet 包提供;
它們有一個特點,那就是基于 servlet 實現的 (第 3 種方式尚未求證).
然而,由于種種原因,我需要基于 struts2 實現,也就是基于 Filter 實現這個過程,百度了良久,發現的方案是: 在 struts2 的攔截器中使用元字符開辟一個路徑,然后再進行攔截,嘗試未果!
constant name= struts.action.excludePattern value= /ws/.*,ws://.* /constant
最后,采用的 spring+ 注解的方式實現 websocket 方案。
又由于其他的原因,導致勢必要將基于 spirngmvc,也就是 servelt 的方案轉到 struts,也就是 Filer 去。因此,經過一番思索加上實踐,終于找到了相應的解決方案這里記錄一下,以期能夠幫助同僚們解決相應的需求:
首先使用堆棧追蹤,找到 websocket 這個 servlet 執行流程:
堆棧如下:
然后,結合 springmvc 的執行流程進行分析:
經過分析,我們可以將整個模型邏輯從 servelt 搬遷到 相應的 Filter 上,但是面對諸多的配置,如何平滑的遷移是個問題,我是這樣處理的,在 mvc 這邊執行時打上斷點,查看相應內存中的變量類型,然后手動構造:
原來的代碼長這樣:
經實踐,那些眾多的配置以及 @Configuration 用于與 springmvc 的相應配置,以及這里本地參數的初始化。因此我完全可以手造一個。
我造的代碼如下:
其它的邏輯就直接基于 struts 即可。
經過實踐,是可行的,且用起來很順手,暫未發現其余問題。
感謝各位的閱讀!關于“如何通過 WebSocket 實現瀏覽器與服務器的通信”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!