websocket契約学習ノート

4979 ワード

websocket契約学習ノート
記事の目次
  • websocketプロトコル学習ノート
  • websocketは何ですか?
  • とsocketの関係
  • httpプロトコルとの異同
  • 使用デモ
  • クライアント使用:
  • サービス端末:
  • より多くの資料
  • websocketは何ですか
    websocketはHTML 5におけるプロトコルです。HTML 5 websocket仕様はwebsocket APIを定義しています。サポートページはwebsocketプロトコルを使用してリモートホストと全二重の通信を行います。HTML 5 websocketは、最小のオーバーヘッドで効率的にWeb接続を提供する。通常、プッシュライブデータを使用してクライアントに送る必要があるのに対して、2つのHTTP接続を維持することによって、全二重接続の古いポーリングまたはロングポーリング(Commet)をシミュレートすることによって、不必要なネットワークトラフィックと遅延が大幅に減少する。
    websocketの最大の特徴は、全二重の通信をサポートすることです。つまり、サーバーは積極的にクライアントに情報を送ることができます。クライアントも積極的にサーバに情報を送ることができます。本当の双方向平等対話であり、サーバーのプッシュ技術の一つです。
    その他の特徴:(1)TCPプロトコルの上に立てば、サーバー側の実装が容易になります。
    (2)HTTPプロトコルとの互換性が良好である。デフォルトポートも80と443で、握手段階はHTTPプロトコルを採用していますので、握手時にはシールドしにくく、各種HTTPプロキシを通過することができます。
    (3)データフォーマットは比較的軽量で、性能オーバーヘッドが小さく、通信効率が高い。
    (4)テキストを送信してもいいし、バイナリデータを送信してもいいです。
    (5)同一ソースの制限がなく、クライアントは任意のサーバと通信することができる。
    (6)プロトコル識別子はws(暗号化すればws)であり、サーバーURLはURLである。
    socketとの関係
    ソケットはトランスポート制御層インターフェースであり、WebSocketはアプリケーション層プロトコルである。
    ソケットは、アプリケーション層とTCP/IPプロトコル族との通信の中間ソフトウェア抽象層であり、TCP/IPプロトコルを呼び出すAPIのセットを提供するインターフェースのセットである。デザインモードでは、ソケットは実際には外観モードであり、複雑なTCP/IPプロトコル族をソケットインターフェースの後ろに隠しています。
    websocketとsocketはあまり関係がないと言ってもいいです。websocketはhttpプロトコルと似たようなアプリケーション層プロトコルです。そして、socketはTCP/IPプロトコルを起動するためのAPIです。
    httpプロトコルとの異同
    同じ:
  • はいずれも同じTCPベースであり、信頼性の高い転送プロトコルである。
  • は、いずれもアプリケーション層プロトコルである。
  • 違い:
  • websocketは双方向通信プロトコルであり、Socketプロトコルをシミュレートして、情報を双方向に送信または受信することができる。HTTPは一方通行です
  • websocketは、ブラウザとサーバが握手して接続を確立する必要があります。httpはブラウザからサーバーへの接続を開始しますが、サーバーはこの接続を知っていません。
  • WebSocketは、握手をするときにHTTPを通じてデータを転送します。しかし、確立後、本当に転送する時にHTTPプロトコルは必要ない。
    websocketでは、サーバーとブラウザがHTTPプロトコルを通じて握手する動作を行い、単独でTCPの通信チャネルを作ってデータの転送を行う必要があります。接続プロセス:
    まず、クライアントはhttp要求を開始し、3回握手した後、TCP接続を確立する。http要求には、Upgrade、Connection、WebSocket-VersionなどのWebSocketサポートのバージョン番号が格納されています。その後、サーバーはクライアントの握手要求を受け取った後、同じHTTPプロトコルでデータをフィードバックします。最後に、クライアントは接続成功のメッセージを受信すると、TCP伝送チャネルを介して全二重通信を開始する。
    デモを使う
    クライアントの使用:
    
    
    
        
        
    
    
    websocket Demo---- user000 <br/>
    <input id="text" type="text"/>
    <button onclick="send()"> Send </button>
    <button onclick="closeWebSocket()"> Close </button>
    <div id="message">   </div>
    
    <script type="text/javascript">
        //           WebSocket
        if('WebSocket' in window){
            websocket = new WebSocket("ws://localhost:8080/Demo/websocketTest/user000");
            console.log("link success")
        }else{
            alert('Not support websocket')
        }
    
        //           
        websocket.onerror = function(){
            setMessageInnerHTML("error");
        };
    
        //           
        websocket.onopen = function(event){
            setMessageInnerHTML("open");
        }
        console.log("-----")
        //          
        websocket.onmessage = function(event){
            setMessageInnerHTML(event.data);
        }
    
        //         
        websocket.onclose = function(){
            setMessageInnerHTML("close");
        }
    
        //        ,      ,     websocket  ,             ,server     。
        window.onbeforeunload = function(){
            websocket.close();
        }
    
        //         
        function setMessageInnerHTML(innerHTML){
            document.getElementById('message').innerHTML += innerHTML + '<br/>';
        }
    
        //    
        function closeWebSocket(){
            websocket.close();
        }
    
        //    
        function send(){
            var message = document.getElementById('text').value;
            websocket.send(message);
        }
    </script>
    
    
    
    </code></pre> 
      <h4>   :</h4> 
      <pre><code>@Slf4j
    @ServerEndpoint(value="/websocketTest/{userId}")
    public class WebServer {
    
        private static String userId;
    
        //     
        @OnOpen
        public void onOpen(@PathParam("userId") String userId, Session session) throws IOException {
            userId = userId;
            log.debug("   :{}",userId);
        }
    
        //     
        @OnClose
        public void onClose(){
            log.debug("  :{}   ",userId);
        }
    
        //       
        @OnMessage
        public void onMessage(String message, Session session) throws IOException {
            log.debug("    {}   {}",userId,message);
            session.getBasicRemote().sendText("   "+userId+"     "); //    
        }
    
        //       
        @OnError
        public void onError(Session session, Throwable error){
            log.debug("  id :{}       ",userId);
            error.printStackTrace();
        }
    
    }
    </code></pre> 
      <h3>    </h3> 
      <p>      :<br/> http://www.ruanyifeng.com/blog/2017/05/websocket.html<br/>     :<br/> https://zh.wikipedia.org/wiki/WebSocket</p> 
     </div> 
    </div>
                                </div>
                            </div>