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は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プロトコルとの異同
同じ:
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>