WebSocket の詳細制御の方法 (HTML)
[この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、 「最新のドキュメント」をご覧ください]
このトピックでは、MessageWebSocket と StreamWebSocket の機能を Windows ランタイム アプリで使うときのソケットの詳細制御の使い方について説明します。
理解しておく必要があること
テクノロジ
-
ソケットと WebSocket を使ったネットワーク通信を可能にします。
必要条件
- このトピックのコード例は、JavaScript で記述されています。WebSocket についての基本的な理解があることが条件となります。
WebSocket の詳細制御の概要
MessageWebSocket クラスと StreamWebSocket クラスには、詳細な制御の扱いに関して同じモデルが採用されています。これらの主要なクラスにはそれぞれ、詳細な制御を行うための関連クラスが存在し、相互にやり取りしています。
- MessageWebSocketControl: MessageWebSocket オブジェクトのサービスの品質を制御します。
- StreamWebSocketControl: StreamWebSocket オブジェクトに対するソケット制御データを提供します。
どちらのタイプの WebSocket も、詳細な制御を行うための基本的なモデルは同じです。 以降の説明では StreamWebSocket を例として使っていますが、同じ手順を MessageWebSocket に適用することもできます。
- StreamWebSocket を作成します。
- StreamWebSocket.Control プロパティを使って、StreamWebSocket オブジェクトに関連付けられている StreamWebSocketControl インスタンスを取得します。
- StreamWebSocketControl のプロパティを使って詳細なソケット オプションを設定します。
アプリから接続操作を行うときは、必ず StreamWebSocketControl のプロパティを先に設定しておく必要があります。このため、詳細オプションを設定するタイミングとしてはソケットの作成直後が理想的です。ソケットから ConnectAsync メソッドが呼び出された後に StreamWebSocketControl プロパティを設定することは避けてください。
StreamWebSocket の詳細制御
StreamWebSocket には、いくつかの詳細オプションが存在します。
- StreamWebSocketControl.NoDelay: StreamWebSocket オブジェクトで Nagle アルゴリズムを使うかどうかを示します。
- StreamWebSocketControl.OutboundBufferSizeInBytes: StreamWebSocket オブジェクトでデータを送るときの送信バッファーのサイズ (バイト単位) を制御します。
- StreamWebSocketControl.ProxyCredential: StreamWebSocket オブジェクトで HTTP ヘッダー認証によってプロキシ サーバーに対する認証を行う際の資格情報を提供します。
- StreamWebSocketControl.ServerCredential: StreamWebSocket オブジェクトで HTTP ヘッダー認証によって WebSocket サーバーに対する認証を行う際の資格情報を提供します。
- StreamWebSocketControl.SupportedProtocols: 接続のハンドシェーク中にサーバーに通知される、サポートされているサブ プロトコルのリストの追加に使うことができるコレクションを取得します。
1 つの例として、StreamWebSocketControl.NoDelay オプションを詳しく見てみましょう。StreamWebSocket の作成時点の既定の設定では、このオプションは true に設定されます。つまり、Nagle アルゴリズムは使うことができません。ただし、小さいパケットを大量に送るアプリで StreamWebSocket を使う場合は、待ち時間さえ問題にならなければ、ネットワーク トラフィックを減らすために StreamWebSocketControl.NoDelay を false に設定することで Nagle アルゴリズムを有効にできます。
次の例では、StreamWebSocket を作り、StreamWebSocketControl.NoDelay を false に設定します。この処理が完了すると、アプリは StreamWebSocket に接続できます。
var clientWebSocket = new Windows.Networking.Sockets.StreamWebSocket();
// Get the current setting for this option
// This isn't required, but it shows how to get the current setting
var currentSetting = clientWebSocket.control.noDelay;
// Set noDelay to false so that the Nagle algorithm isn't disabled
clientWebSocket.control.noDelay = false;
// Now you can call the ConnectAsync method to connect the StreamWebSocket.
MessageWebSocket の詳細制御
MessageWebSocket に用意されている詳細オプションの多くは、StreamWebSocket と共通していますが、いくつか異なる点もあります。
- MessageWebSocketControl.MaxMessageSize: MessageWebSocket オブジェクトで構成する WebSocket メッセージの最大メッセージ サイズ (バイト単位) を制御します。
- MessageWebSocketControl.MessageType: MessageWebSocket オブジェクトで構成する WebSocket メッセージのタイプ (バイナリまたは UTF-8) を制御します。
- MessageWebSocketControl.OutboundBufferSizeInBytes: MessageWebSocket オブジェクトでデータを送るときの送信バッファーのサイズ (バイト単位) を制御します。
- MessageWebSocketControl.ProxyCredential: MessageWebSocket オブジェクトで HTTP ヘッダー認証によってプロキシ サーバーに対する認証を行う際の資格情報を提供します。
- MessageWebSocketControl.ServerCredential: MessageWebSocket オブジェクトで HTTP ヘッダー認証によって WebSocket サーバーに対する認証を行う際の資格情報を提供します。
- MessageWebSocketControl.SupportedProtocols: 接続のハンドシェーク中にサーバーに通知される、サポートされているサブ プロトコルのリストの追加に使うことができるコレクションを取得します。
MessageWebSocket についても、ここで紹介した例とほぼ同じ方法でオプションを設定することができます。
注釈
制御データ以外にも、同様の関連クラスが主要なクラスに追加情報を提供します。その例を次に示します。
- MessageWebSocketInformation: MessageWebSocket オブジェクトのソケット情報を提供します。
- StreamWebSocketInformation: StreamWebSocket オブジェクトのソケット情報を提供します。
これらのクラスには、ソケットに対して追加情報を提供するプロパティが存在します。
関連トピック
その他
TLS/SSL を使って WebSocket 接続のセキュリティを確保する方法
リファレンス
サンプル