WebSocket を使った接続 (HTML)
[この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、 「最新のドキュメント」をご覧ください]
WebSocket を使い、待機時間が短く、セキュリティ保護された、リアルタイムで双方向対応の通信によってデータを送受信するには、Windows.Networking.Sockets 名前空間の機能を使います。
WebSocket とは
WebSocket プロトコルは、クライアントとサーバー間の高速でセキュリティ保護された双方向通信を Web 経由で 行うためのメカニズムを定義します。データはすぐに、全二重の 1 つのソケット接続によって転送され、両方のエンドポイントでメッセージの送受信をリアルタイムで実行できます。WebSocket はリアルタイムのゲーム、ソーシャル ネットワークのインスタント通知、株価や天気予報のリアルタイム表示、セキュリティや高速なデータ転送を必要とするアプリなど、Windows ランタイム アプリでの使用に適しています。WebSocket プロトコルは既定で Web ブラウザーと同じポート (HTTP と HTTPS) を使うため、WebSocket はプロキシとファイアウォール経由でも機能します。
WebSocket 接続を確立するには、クライアントとサーバー間で専用の HTTP ベースのハンドシェークをやり取りします。成功した場合、直前に確立された TCP 接続を使って、アプリケーション レイヤー プロトコルが HTTP から WebSocket に "アップグレード" されます。 この時点で、HTTP は完全に不要となります。WebSocket 接続が閉じるまで、データの送受信は、両方のエンドポイントから WebSocket プロトコルを使って行うことができます。
重要 クライアントとサーバーの両方が WebSocket プロトコルを使っていないと、クライアントは WebSocket を使ってデータを転送することはできません。 サーバーが WebSocket をサポートしていない場合は、別の方法でデータ転送を行う必要があります。
Windows.Networking.Sockets 名前空間では、Windows ランタイムのクライアント WebSocket がサポートされます。Windows 8.1 のデスクトップ アプリでは、クライアント WebSocket とサーバー WebSocket の両方がサポートされます。
Windows.Networking.Sockets 名前空間には、Windows ランタイム アプリでクライアントが使うことのできる 2 種類の WebSocket オブジェクトが定義されています。MessageWebSocket と StreamWebSocket です。次の表で、この 2 種類の WebSocket について説明します。
MessageWebSocket | StreamWebSocket |
---|---|
メッセージが極端に大きくない標準的なシナリオに適しています。 | 大きなファイル (写真、ムービーなど) を転送するシナリオに適しています。 |
WebSocket メッセージ全体の受信が完了したときに受け取る通知を有効にできます。 | メッセージを分割し、何回かに分けて読み取ることができます。 |
UTF-8 とバイナリの両方のメッセージがサポートされます。 | バイナリ メッセージのみサポートされます。 |
UDP ソケット (DatagramSocket) に若干似ています。 | TCP ソケット (StreamSocket) に若干似ています。 |
WebSocket とネットワーク分離の併用
開発者は Windows ランタイムのネットワーク分離機能を使って、Windows ランタイム アプリによるネットワーク アクセスを制御および制限できます。 すべてのアプリにネットワークへのアクセスが必要なわけではありません。ただし、Windows ランタイムには、アプリでネットワークへのアクセスを行うためのさまざまなレベルのネットワーク アクセスが用意されており、適切な機能を選んで有効にできます。
ネットワーク分離では、開発者が必要なネットワーク アクセスのスコープをアプリごとに定義できます。適切なスコープが定義されていないアプリは、特定の種類のネットワークや特定の種類のネットワーク要求 (クライアント側から開始される出力方向の要求、または相手から開始される入力方向の要求とクライアント側から開始される出力方向の要求の両方) にアクセスできません。 ネットワーク分離を設定して強制的に適用できるため、アプリのセキュリティが侵害されたとしても、そこからアクセスできるネットワークは、そのアプリに対して明示的に許可されている範囲に限られます。そのため、他のアプリケーションや Windows そのものへの影響の範囲をきわめて小さくできます。
ネットワーク分離は、ネットワーク アクセスを伴う Windows.Networking.Sockets 名前空間に存在するすべてのクラス要素に影響します。 ネットワーク分離は、Windows によって能動的かつ強制的に適用されます。適切なネットワーク機能が有効になっていなければ、Windows.Networking.Sockets 名前空間の MessageWebSocket クラスや StreamWebSocket クラスでのネットワーク アクセスを伴うメソッドの呼び出しは失敗する可能性があります。
アプリのネットワーク機能は、アプリのビルド時にアプリ マニフェストで構成します。通常、ネットワーク機能は、アプリの開発時に Microsoft Visual Studio 2013 Update 2 を使って追加します。 アプリ マニフェスト ファイルをテキスト エディターで直接編集してネットワーク機能を設定することもできます。
ネットワーク分離について詳しくは、「ネットワーク機能を設定する方法」をご覧ください。
対象となる開発者
次のトピックの例は、JavaScript で記述されており、WebSocket のサンプルに基づいています。 JavaScript を使った Windows ランタイム アプリの作成についての一般的なヘルプは、「JavaScript を使った Windows ランタイム アプリのためのロードマップ」をご覧ください。
このセクションの内容
トピック | 説明 |
---|---|
MessageWebSocket を使って接続する方法 | MessageWebSocket を使って Web サーバーとの間でデータを送受信するための要件と具体的な手順について説明します。 |
StreamWebSocket を使って接続する方法 | StreamWebSocket を使って Web サーバーとの間でデータを送受信するための要件と具体的な手順について説明します。 |
WebSocket の詳細制御の方法 | ソケットの詳細制御によって、WebSocket オブジェクトのオプションを設定する方法について説明します。 |
TLS/SSL を使って WebSocket 接続のセキュリティを確保する方法 | トランスポート層セキュリティ (TLS)/Secure Sockets Layer (SSL) を使って WebSocket 接続のセキュリティを確保する方法について説明します。 |
類似および関連する機能について
セクション | 説明 |
---|---|
ネットワーク分離機能を構成する方法 | ネットワーク分離機能と、この機能を構成して Windows ストア アプリのネットワーク アクセスを完全に制御する方法について説明します。 |
ソケットを使ったネットワーク接続の確立 | ソケットを使ってネットワーク リソースとの間でデータを送受信するための要件と具体的な手順について説明します。 |
ネットワーク サポートの追加 | アプリのネットワーク対応化に関する情報が記載されています。 |
ネットワーク接続のトラブルシューティングとデバッグ | 接続の問題のトラブルシューティングに役立つ推奨事項と情報を紹介しています。 |
関連トピック
その他
JavaScript を使った Windows ランタイム アプリのためのロードマップ
リファレンス
サンプル