Spring-boot-starter-websocket入門

3654 ワード

理解1一部のブラウザがサポートしていないか、または一部の制限エージェントがhttpプロトコルがwebsocketを開くことを阻止することができる.Websocketが開きすぎると自動的に閉じる可能性があるため、Spring FrameworkはSockJSプロトコルに基づく透明なバックアップスキームを提供しています.これらのシナリオは、アプリケーションを変更する必要がなく、構成によって有効にできます.
2 Spring Framework 4は、Message、Messaging、MessagingなどのSpring Integrationプロジェクトの重要な抽象を含む新しいspring-messagingモジュールを含み、このようなメッセージアーキテクチャの基礎とすることができる.このモジュールはまた、Spring MVC注釈に基づくプログラミングモデルと同様に、メッセージを方法にマッピングするための注釈のセットを含む.
バックエンド実装:
@ServerEndpoint("/WebSocketServer")
public class ServerEndPoint808
{
@OnOpen
public void start(Sessionsession)
{
System.out.println(「接続成功! "+session.getId());
}
@OnMessage
public void reMessage(Session session, Stringstr)
{
try
{
session.getBasicRemote().sendText(str+ "who areyou");
}
catch (IOExceptione)
{
e.printStackTrace();
}
}
@OnError
public void error(Session session, Throwablet){t.printStackTrace();}
@OnClose
public void close(){}
このクラスはWebSocketのサービス・エンドとして、@ServerEndpoint(「/push」)のannotationコメント・エンド・ポイントは、ws:/[ServerEnd IPまたはドメイン名]:[ServerPort]/プロジェクト/WebSocketServerのアクセス・エンド・ポイントでWebSocketサービス・エンドを実行することを示します(このクラスには共通の非パラメトリック関数が必要です).
注意事項:@serverendpoint valueが必須パラメータsubprotocols encoder decoder configurator(後の3つはすべてインタフェースを継承または実装し、完全なクラス名をパラメータ値とする)
1つのエンドポイントクラスでは、最大3つのメソッドに@OnMessage注記を付けることができます.
Websocketのプロトコルは、Httpプロトコルとは異なるため、セッションを直接取得できない@websistenerクラス実装サーブレットRequestListenerインタフェース書き換えmodifyHandshakeメソッド「((HttpサーブレットRequest)sre.getサーブレットRequest().getSession()」を追加できます.
                If you have to send messages thatare not responses, store the Session object as an instance variableof the endpoint class in the method annotated with@OnOpen
sessionはbasicとasyncの2種類のremote変数を再呼び出して変数のsendObjectメソッドを呼び出してデータを送信することができます
 
フロントエンドの実装:

            var socket;
            if(typeof(WebSocket) == "undefined") {
                alert("        WebSocket");
                return;
            }

            $("#btnConnection").click(function() {
                //   WebSocket  ,              
                socket = new WebSocket("ws://192.168.1.2:8888");
                //    
                socket.onopen = function() {
                    alert("Socket    ");
                    //socket.send("          " + location.href + new Date());
                };
                //      
                socket.onmessage = function(msg) {
                    alert(msg.data);
                };
                //    
                socket.onclose = function() {
                    alert("Socket   ");
                };
                //       
                socket.onerror = function() {
                    alert("     ");
                }
            });
            
            //    
            $("#btnSend").click(function() {
                socket.send("          " + location.href + new Date());
            });
            
            //  
            $("#btnClose").click(function() {
                socket.close();
            });
        

参照先:
http://www.cnblogs.com/best/archive/2016/09/12/5695570.html
https://blog.csdn.net/zlxls/article/details/78504591
https://blog.csdn.net/zilaike/article/details/78227810
以上、オリジナルのWebSocketを使用しています
stompがサポートするwebsocket:
https://www.cnblogs.com/myitroad/p/www.cnblogs.com/myitroad/p/9334141.html
https://www.cnblogs.com/GoodHelper/p/7078381.html
http://blog.geekidentity.com/spring/spring_websocket_translation/