違い: ソケットは TCP/IP ネットワークの API です。これは、TCP または UDP の使用を容易にするために抽象化された層です。アプリケーション層と伝送制御層の間の一連のインターフェイスです。 WebSocket は、典型的なアプリケーション層プロトコルです。
このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。
関連する推奨事項: 「プログラミング ビデオ 」
WebSocket の概要と原理
# WebSocket プロトコルは HTML5 の新しいプロトコルです。ブラウザとサーバー間の全二重通信を実装します。最初のハンドシェイクは、HTTP リクエストを使用して完了する必要があります。
——Baidu Encyclopedia
Web ページ上の QQ やチャット システムなど、Web サイトでの即時メッセージングは非常に一般的です。待って。以前の技術的能力によれば、この問題を解決するには通常、ポーリングおよび Comet テクノロジーが使用されます。
HTTP プロトコルは、非永続的な一方向のネットワーク プロトコルです。接続が確立された後、サーバーが対応するデータを返す前に、ブラウザーはサーバーにリクエストを行うことのみが許可されます。インスタント メッセージングが必要な場合、ブラウザは特定の時間間隔 (1 秒など) でポーリングを通じてリクエスト リクエストをサーバーに送信し、最新のデータをブラウザに返します。この方法の最も明らかな欠点は、継続的にリクエストを送信する必要があり、通常 HTTP リクエストのヘッダーが非常に長く、少量のデータを送信するには莫大な料金を支払う必要があり、非常に不経済です。そして多くの帯域幅を占有します。
欠点: 不要なリクエストが多すぎて、トラフィックとサーバー リソースが浪費されます。すべてのリクエストと応答が同じヘッダー情報で一定量のトラフィックを無駄にします。
ただし、WebSocket アピアランスはそれを補うことができます。この欠点のために。 WebSocket では、サーバーとブラウザーは HTTP プロトコルを介してハンドシェイク アクションを実行し、データ送信用に別の TCP 通信チャネルを確立するだけで済みます。
WebSocket は HTTP と同様のアプリケーション層プロトコルですが、TCP をベースに構築された双方向通信プロトコルです。
接続プロセス - ハンドシェイク プロセス
WebSocket がハンドシェイクを確立すると、データは HTTP 経由で送信されます。ただし、確立後は実際の送信時には HTTP プロトコルは必要ありません。
Socket は実際にはプロトコルではなく、TCP または UDP を使用する便宜のために抽象化された層であり、アプリケーションにあります。レイヤとトランスポート制御レイヤ間の一連のインターフェイス。
ソケットは、アプリケーション層と TCP/IP プロトコル ファミリ間の通信のための中間ソフトウェア抽象化層であり、一連のインターフェイスです。デザイン モードでは、Socket は実際にはファサード モードであり、複雑な TCP/IP プロトコル ファミリを Socket インターフェイスの背後に隠します。ユーザーにとっては、一連の単純なインターフェイスがすべてであり、Socket が指定された要件を満たすようにデータを編成できるようになります。
2 つのホストが通信する場合、Socket を介して接続する必要があり、Socket は TCP/IP プロトコルを使用して TCP 接続を確立します。 TCP 接続は基礎となる IP プロトコルにより多く依存しますが、IP プロトコル接続はリンク層などの下位層に依存します。
WebSocket は、典型的なアプリケーション層プロトコルです。
Socketは伝送制御層プロトコルであり、WebSocketはアプリケーション層プロトコルです。
WebSocket API は HTML5 標準の一部ですが、これは、WebSocket を HTML で使用する必要がある、または WebSocket のみを使用できるという意味ではありません。ブラウザベースで使用され、サーバー アプリケーションで使用されます。
実際、多くの言語、フレームワーク、サーバーが次のような WebSocket サポートを提供しています。
WebSocket のメカニズム
WebSocket の原理と動作メカニズムを簡単に紹介します。
WebSocket は HTML5 の新しいプロトコルです。ブラウザとサーバー間の全二重通信を実現し、サーバーのリソースと帯域幅を節約し、リアルタイム通信を実現します。TCP 上に構築され、HTTP と同様に TCP を通じてデータを送信します。ただし、HTTP との最大の違いは次のとおりです。
WebSocket モードを使用したクライアントとサーバー間の対話は次のとおりです。
##図 2. WebSocket リクエスト応答のクライアントとサーバーの対話図
上図の比較からわかるように、各要求と応答でクライアントがサーバーとの接続を確立する必要がある従来の HTTP モードと比較して、WebSocket は TCP の長時間接続通信です。 WebSocket 接続が確立されると、以降のデータはすべてフレームシーケンスの形式で送信されます。クライアントが WebSocket 接続を切断する前、またはサーバーが接続を切断する前に、クライアントとサーバーが接続要求を再開始する必要はありません。クライアントとサーバー間の大規模な同時実行性と重い対話型負荷トラフィックの場合、ネットワーク帯域幅リソースの消費が大幅に節約され、明らかなパフォーマンス上の利点が得られます。さらに、クライアントは同じ永続接続上でリアルタイムでメッセージを送受信します。 . 性的な利点は明らかです。
クライアントとサーバー間の対話型メッセージを通じて、WebSocket 通信と従来の HTTP の違いを見てみましょう:
クライアントでは、新しい WebSocket が新しい WebSocket クライアント オブジェクトをインスタンス化します。 ws://yourdomain:port/path のようなサーバー WebSocket URL に送信します。WebSocket クライアント オブジェクトは、それを自動的に解析して WebSocket リクエストとして識別し、それによってサーバー ポートに接続し、両者の間でハンドシェイク プロセスを実行します。
リスト 1. WebSocket クライアント接続メッセージ
GET /webfin/websocket/ HTTP/1.1 Host: localhost Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg== Origin: http://localhost :8080 Sec-WebSocket-Version: 13 http://localhost :8080 Sec-WebSocket-Version: 13
クライアントによって開始された WebSocket 接続メッセージは、従来の HTTP メッセージと似ていることがわかります。 「Upgrade: websocket」パラメータ値は、これが WebSocket タイプであることを示します。リクエスト、「Sec-WebSocket-Key」は、WebSocket クライアントによって送信される Base64 でエンコードされた暗号文であり、サーバーは対応する暗号化された「Sec-WebSocket」を返す必要があります。 -Accept」応答。そうでない場合、クライアントは「WebSocket ハンドシェイク中のエラー」エラーをスローし、接続を閉じます。
メッセージ受信後にサーバーから返されるデータ形式は次のとおりです。
リスト 2.WebSocket サーバー応答メッセージ
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
「Sec-WebSocket-Accept」の値サーバーがクライアントと同じキーを使用して計算し、クライアントに返します。「HTTP/1.1 101 スイッチング プロトコル」とは、サーバーが WebSocket プロトコルのクライアント接続を受け入れることを意味します。このような要求と応答の処理の後、クライアント サーバーはWebSocket 接続のハンドシェイクが成功し、その後の TCP 通信が実行できるようになります。
開発の観点から見ると、WebSocket API も非常にシンプルです。WebSocket をインスタンス化して接続を作成するだけで済みます。その後、サーバーとクライアントは相互にメッセージを送信し、応答することができます。WebSocket の実装では、以下のケース分析セクションで、WebSocket API とコードの実装の詳細を確認できます。
WebSocket の実装
以下は、WebSocket サーバー API とクライアント API の簡単な説明です。
WebSocket サーバー API
表 1. WebSocket サーバーのサポート
アプリケーション サーバー | 備考 | |
---|---|---|
WebSphere | WebSphere 8.0 以降がサポートされており、MQTT と組み合わせた 7.X より前のバージョンは同様の HTTP ロング接続をサポートします | |
WebLogic | WebLogic 12c サポート、11g および 10g バージョンは、HTTP Publish | |
IIS | ## を介した同様の HTTP 長い接続をサポートします。 #IIS 7.0 サポート||
Tomcat | Tomcat 7.0.5 以降のサポート、カスタム API による 7.0.2X および 7.0.3X のサポート | |
Jetty | Jetty 7.0 以降はサポート |
浏览器 | 支持情况 |
---|---|
Chrome | Chrome version 4+支持 |
Firefox | Firefox version 5+支持 |
IE | IE version 10+支持 |
Safari | IOS 5+支持 |
Android Brower | Android 4.5+支持 |
客户端 WebSocket API 基本上已经在各个主流浏览器厂商中实现了统一,因此使用标准 HTML5 定义的 WebSocket 客户端的 JavaScript API 即可,当然也可以使用业界满足 WebSocket 标准规范的开源框架,如 Socket.io。
以下以一段代码示例说明 WebSocket 的客户端实现:
清单 5.WebSocket 客户端 API 示例
var ws = new WebSocket(“ws://echo.websocket.org”); ws.onopen = function(){ws.send(“Test!”); }; ws.onmessage = function(evt){console.log(evt.data);ws.close();}; ws.onclose = function(evt){console.log(“WebSocketClosed!”);}; ws.onerror = function(evt){console.log(“WebSocketError!”);};
第一行代码是在申请一个 WebSocket 对象,参数是需要连接的服务器端的地址,同 HTTP 协议开头一样,WebSocket 协议的 URL 使用 ws://开头,另外安全的 WebSocket 协议使用 wss://开头。
第二行到第五行为 WebSocket 对象注册消息的处理函数,WebSocket 对象一共支持四个消息 onopen, onmessage, onclose 和 onerror,有了这 4 个事件,我们就可以很容易很轻松的驾驭 WebSocket。
当 Browser 和 WebSocketServer 连接成功后,会触发 onopen 消息;如果连接失败,发送、接收数据失败或者处理数据出现错误,browser 会触发 onerror 消息;当 Browser 接收到 WebSocketServer 发送过来的数据时,就会触发 onmessage 消息,参数 evt 中包含 Server 传输过来的数据;当 Browser 接收到 WebSocketServer 端发送的关闭连接请求时,就会触发 onclose 消息。我们可以看出所有的操作都是采用异步回调的方式触发,这样不会阻塞 UI,可以获得更快的响应时间,更好的用户体验。
想要查阅更多相关文章,请访问PHP中文网!!
以上がWebソケットとソケットの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。