基於struts實現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即可。

  經我實踐,是可行的,且用起來很順手,暫未發現其餘問題。 

  如有朋友有類似需求,歡迎留言討論。  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章