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

現現在有個需求,基於websocket實現瀏覽器與服務器的通訊。因爲以前沒有使用過websocket,在網上大體搜索了一圈,尋找websocket的集成方案。網上尋找的方案大體以下:
1.基於spring的方式實現,加入spring-websocket依賴,加註解,配置相應的攔截器和路徑;
2.基於springBoot的方式,本質上仍是基於spring;
3.基於J2EE應用服務器,好像從tomcat7開始有提供websocket支持,直接用@WebsocketEnd 可實現,該註解由servlet包提供;web

它們有一個特色,那就是基於servlet實現的(第3種方式還沒有求證).spring

然而,因爲種種緣由,我須要基於struts2實現,也就是基於Filter實現這個過程,百度了良久,發現的方案是: 在struts2的攔截器中使用元字符開闢一個路徑,而後再進行攔截, 嘗試未果!瀏覽器

<constant name="struts.action.excludePattern" value="/ws/.*,ws://.*"></constant>

最後,採用的spring+註解的方式實現websocket方案。tomcat

又因爲其餘的緣由,致使勢必要將基於 spirngmvc,也就是servelt的方案轉到 struts,也就是Filer去。 所以,通過一番思索加上實踐,終於找到了相應的解決方案這裏記錄一下,以期可以幫助同僚們解決相應的需求:服務器

首先使用堆棧追蹤,找到websocket這個servlet執行流程:websocket

堆棧以下:mvc

clipboard.png

而後,結合springmvc的執行流程進行分析:socket

clipboard.png

通過分析,咱們能夠將整個模型邏輯從servelt 搬遷到 相應的Filter上,可是面對諸多的配置,如何平滑的遷移是個問題,我是這樣處理的,在mvc這邊執行時打上斷點,查看相應內存中的變量類型,而後手動構造。
原來的代碼長這樣:jsp

clipboard.png

經實踐,那些衆多的配置以及 @Configuration 用於與springmvc的相應配置,以及這裏本地參數的初始化。 所以我徹底能夠手造一個。spa

我造的代碼以下:

clipboard.png

clipboard.png

其它的邏輯就直接基於struts便可。
通過實踐,是可行的,且用起來很順手,暫未發現其他問題。

應用案例效果圖

相關文章
相關標籤/搜索