プロジェクト概要48:Springboot統合のWebSocketケース

プロジェクト概要48:Springboot統合のWebSocketケース

 

Springbootの特定はのWebSocketは、多くの方法で実装統合が、原理は同じです。

まず、特定のケースを置きます

  pom.xmlジャー依存性

        <! -のWebSocket - > 
        <依存> 
            <groupIdを> org.springframework.boot </ groupIdを> 
            <たartifactId>春・ブート・スタータのWebSocket </たartifactId> 
        </依存関係>

   サーバーは、メッセージを送信します

パッケージcom.hs.web.thirdparty.webconnect。

輸入com.hs.common.util.json.JsonUtil; 

輸入はjava.util.ArrayList;
輸入はjava.util.List; 


パブリック クラスWebConnectionManager { 

    プライベート 静的 WebConnectionManagerインスタンス= 新しいWebConnectionManager()。

    プライベートリスト<UpdateListener> changeListenerList。

    プライベートWebConnectionManager(){ 
        changeListenerList = 新規のArrayList <UpdateListener> (); 
    } 

    パブリック 静的WebConnectionManagerのgetInstance(){
         リターンインスタンス; 
    } 

    公共 ボイドのaddChangeListener(UpdateListener changeListenerです){
         同期(changeListenerList){ 
            changeListenerList.add(changeListenerです)。
        } 
    } 
    
    公共 ボイドremoveChangeListener(UpdateListener changeListenerです){
         同期(changeListenerList){
             ため(UpdateListenerリスナー:changeListenerList){
                 場合(listener.getUid()に等しい(changeListener.getUid())){ 
                    changeListenerList.remove(リスナー)。
                    休憩; 
                }  
            }
        } 
    }

    公共 ボイドのsendMessage(文字メッセージ){
         同期(changeListenerList){
             ため(UpdateListenerリスナー:changeListenerList){ 
                listener.updateHandle(メッセージ)。
            } 
        } 
    } 
    
    公共 ボイドのsendMessage(オブジェクトobj){
         // するSystem.out.println( "JsonUtil.toJson(OBJ):" + JsonUtil.toJson(OBJ))。
        sendMessage(JsonUtil.toJson(OBJ))。
    } 

    プライベート文字列のgetMessage(){
         戻り ヌル
    } 
    
    パブリック 静的 ボイドメイン(文字列[]引数){ 
    } 
    

}

   クライアントは、入口を要求します

パッケージcom.hs.web.thirdparty.webconnect。
輸入org.springframework.stereotype.Component; 

輸入javax.websocket.OnClose;
輸入javax.websocket.OnMessage;
輸入javax.websocket.OnOpen;
輸入javax.websocket.Session。
輸入javax.websocket.server.ServerEndpoint;
インポートにjava.io.IOException;
輸入java.util.logging.Loggerの; 

@ServerEndpoint(値 = "/モニター" 
@Component 
パブリック クラスWebSocketServer { 
    
    プライベートセッションtargetSession。
    プライベートUpdateListener changeListenerです。
    プライベート 静的 最終ロガーのsyslogger = Logger.getLogger( "syslogの" ); 

    / ** 
     * @説明:链接建立成功时调用的方法
     * @param 
     * @return   無効
     * @author   TangYujie 
     * @日2019年12月12日夜05時11分
     * / 
    @OnOpen 
    公共 のボイドオープン(セッションsession){
         この。 targetSession = セッション。
        
        changeListenerです = 新しいUpdateListener(){ 
            
            @Override 
            公共ストリングGETUID(){
                 リターンtargetSession.getId()。
            } 
            
            @Override 
            公共 ボイドupdateHandle(文字メッセージ){ 
                のsendMessage(メッセージ)。
            } 
        }。
        
        WebConnectionManager.getInstance()のaddChangeListener(changeListenerです)。
        sysLogger.info( + "***のWebSocketは、セッションIDから開く" targetSession.getId()); 
    } 

    / ** 
     * @説明:收到客户端消息
     * @param 
     * @return   無効
     * @author   TangYujie 
     * @日2019年12月12日夜05時13 
     * / 
    @OnMessage 
    公共 のボイドInMessage属性(文字列メッセージ){ 

    } 

    / ** 
     * @説明:连接关闭
     * @param 
     * @return   ボイド
     * @author   TangYujie 
     * @日2019年12月12日夜05時15分
     * / 
    @OnClose 
    公共 ボイド端(){ 
        WebConnectionManager。 getInstance()removeChangeListener(changeListenerです)。
        sysLogger.infoは( + "***のWebSocketは、セッションIDから閉じ、" この.targetSession.getId()); 
    } 
    
    プライベート 同期 のボイドのsendMessage(文字列のメッセージ){
         試み{
            targetSession.getBasicRemote()sendText(メッセージ)。
        } キャッチ(例外:IOException e)の{ 
            sysLogger.warning(e.getMessage())。
        } キャッチ(IllegalStateExceptionが電子){ 
            sysLogger.warning(e.getMessage())。
        } 
    } 
    

}

  リスナーインタフェースクラス:インタフェースクラスはupdateHandle(データベース処理)とGETUID(取得UID)方法2を定義します

パッケージcom.hs.web.thirdparty.webconnect。

パブリック インターフェースUpdateListener { 
    
    ボイドupdateHandle(文字列メッセージ)
    
    ストリングGETUID()。

}

  サーバーは、メッセージを送信します

    パブリック 静的 ボイドメイン(文字列[]引数){ 
        Stringデータ =「これはテストメッセージです」
        WebConnectionManager.getInstance()のsendMessage(データ)。
    }

 

 

分析ショー:

  1- WSによってクライアント場合:// IP:ポート/モニタ接続ソケットは、@ServerEndpoint(値=「/モニター」)注釈に従って、標識@OnOpen、すなわち、接続が確立され、WebSocketServer openメソッドを行います。

  2オープンUpdateListener方法が実装インタフェースクラス、これはWebConnectionManagerリスト<UpdateListener> changeListenerListを達成するために添加され、そしてupdateHandle UpdateListenerのインタフェースクラスがtargetSession.getBasicRemote()sendText(メッセージ);. Aサービスを実現プッシュメッセージの終わり。

  3-場合WebConnectionManager.getInstance()によってサーバのsendMessage(データ)メッセージを送信する場合、この方法は、それによってプッシュメッセージを行う、updateHandle行われる、請求一覧<UpdateListener> changeListenerListを横断します。

おすすめ

転載: www.cnblogs.com/wobuchifanqie/p/12033128.html