違い: ソケットは 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 をベースに構築された双方向通信プロトコルです。
接続プロセス - ハンドシェイク プロセス
- 1. ブラウザとサーバーは、TCP 接続と 3 ウェイ ハンドシェイクを確立します。これは通信の根幹である伝送制御層であり、失敗するとその後実行されなくなります。
- 2. TCP 接続が成功すると、ブラウザは WebSocket がサポートするバージョン番号などの情報を HTTP プロトコル経由でサーバーに送信します。 (開始前の HTTP ハンドシェイク)
- 3. サーバーはクライアントのハンドシェイク要求を受信した後、HTTP プロトコルを使用してデータをフィードバックします。
- 4. 接続成功メッセージを受信した後、通信は TCP チャネルを通じて送信されます。
WebSocket と HTTP の関係
同じ点
- 1. どちらも TCP に基づいており、信頼性が高い. 転送プロトコル。
- 2. これらはすべてアプリケーション層プロトコルです。
相違点
- 1. WebSocket は、Socket プロトコルをシミュレートし、双方向で情報を送受信できる双方向通信プロトコルです。 HTTP は一方向です。
- 2. WebSocket では、接続を確立するためにハンドシェイクが必要です。
連絡先
WebSocket がハンドシェイクを確立すると、データは HTTP 経由で送信されます。ただし、確立後は実際の送信時には HTTP プロトコルは必要ありません。
WebSocket と Socket の関係
Socket は実際にはプロトコルではなく、TCP または UDP を使用する便宜のために抽象化された層であり、アプリケーションにあります。レイヤとトランスポート制御レイヤ間の一連のインターフェイス。
ソケットは、アプリケーション層と TCP/IP プロトコル ファミリ間の通信のための中間ソフトウェア抽象化層であり、一連のインターフェイスです。デザイン モードでは、Socket は実際にはファサード モードであり、複雑な TCP/IP プロトコル ファミリを Socket インターフェイスの背後に隠します。ユーザーにとっては、一連の単純なインターフェイスがすべてであり、Socket が指定された要件を満たすようにデータを編成できるようになります。
2 つのホストが通信する場合、Socket を介して接続する必要があり、Socket は TCP/IP プロトコルを使用して TCP 接続を確立します。 TCP 接続は基礎となる IP プロトコルにより多く依存しますが、IP プロトコル接続はリンク層などの下位層に依存します。
WebSocket は、典型的なアプリケーション層プロトコルです。
違い
Socketは伝送制御層プロトコルであり、WebSocketはアプリケーション層プロトコルです。
HTML5 と WebSocket の関係
WebSocket API は HTML5 標準の一部ですが、これは、WebSocket を HTML で使用する必要がある、または WebSocket のみを使用できるという意味ではありません。ブラウザベースで使用され、サーバー アプリケーションで使用されます。
実際、多くの言語、フレームワーク、サーバーが次のような WebSocket サポートを提供しています。
- * C ベースの libwebsocket.org
- * Node.js ベースの Socket.io
- * Python ベースの ws4py
- * C ベースの WebSocket
- * Apache の WebSocket サポート: Apache モジュール mod_proxy_wstunnel
- * Nginx の WebSocket サポート: WebSocket プロキシとしての NGINX、NGINX が WebSocket プロトコル、WebSocket プロキシのサポートを発表
- * lighttpd WebSocket をサポートします: mod_websocket
WebSocket のメカニズム
WebSocket の原理と動作メカニズムを簡単に紹介します。
WebSocket は HTML5 の新しいプロトコルです。ブラウザとサーバー間の全二重通信を実現し、サーバーのリソースと帯域幅を節約し、リアルタイム通信を実現します。TCP 上に構築され、HTTP と同様に TCP を通じてデータを送信します。ただし、HTTP との最大の違いは次のとおりです。
- #WebSocket は双方向通信プロトコルです。接続を確立すると、WebSocket サーバーとブラウザ/クライアント エージェントは、Socket と同様に、相互にデータをアクティブに送受信できます。
- WebSocket では、TCP のようなクライアントとサーバーがハンドシェイクを通じて接続する必要があり、接続が成功した場合にのみ相互に通信できます。
##図 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 の実装はクライアントとサーバーの 2 つの部分に分かれており、クライアント (通常はブラウザ) は WebSocket 接続要求を発行し、サーバーは実装 TCP ハンドシェイクと同様のアクションにより、ブラウザ クライアントと WebSocket サーバーの間に HTTP 長時間接続の高速チャネルが形成されます。その後、両者の間で直接データが送信されるため、接続を開始して応答する必要がなくなります。
以下は、WebSocket サーバー API とクライアント API の簡単な説明です。
WebSocket サーバー API
WebSocket サーバーは、基本的に、JEE JSR356 標準仕様 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

Dreamweaver Mac版
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









