通過WebSocket實現瀏覽器與服務器的通信


現如今有個需求,基於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即可。
經過實踐,是可行的,且用起來很順手,暫未發現其余問題。

應用案例效果圖


免責聲明!

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



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