2016-03-20 44 views
1

NSURLConnectionとNSURLSessionの2つのバージョンを持つバックエンドサーバーと通信するロジックがあります。後者は、NSURLConnectionの使用が推奨されていないために作成されました。また、バックグラウンドのダウンロード機能を活用したいと考えています。これらのクラスは、クライアントを認証するためのクライアント側の証明書をサポートするために作成されています。SSLセッションの共有に関するNSURLSessionとNSURLConnectionの使用

この通信を行うクラスは、アプリケーション全体を通していくつかの異なるタイプのルーチンから呼び出されます。

NSURLSessionバージョンを使用すると、SSL(TLSv1)セッションが再利用されることはなく、[クライアントハロー、サーバーハロー、証明書、証明書、クライアントのフルチェーンが存在することがわかります鍵交換、証明書の検証など]を行います。 「Client Hello」メッセージを見ると、メッセージに「セッションID」がないことがわかります。そのため、SSLセッションが再利用されることはないと思います。

古いNSURLConnectionバージョンでは、セッションが再利用されることが多く、以前のセッションIDが「クライアントのHello」メッセージで示されることがよくあります。

これらの方法では、NSURLConnectionまたはNSURLSessionの新しいインスタンスを作成しています。 NSURLConnectionはアプリケーション全体で動作しますが、NSURLSessionは動作しません。

しかし、私は、SSLセッションがサーバーとクライアントとするたびに送信されていないクライアント証明書の間で共有されるように、私は私のNSURLSessionのロジックを記述する必要があるかを確認していません。私は1つの方法は、単一のNSURLSessionインスタンスを使用するかもしれないと思うが、これが正しいデザインパターンであるかどうかはわかりません。 NSURLSessionで

答えて

0

異なるセッションは、このようになどの同時接続の最大数の異なる制限、異なるキープアライブの設定、別のプロキシ設定、

を持つことができるので、あなたならば、接続は、複数のセッション間で共有されていませんセッションごとに1つのリクエストしか作成しないと、毎回新しい接続が作成され、完全なTLSセットアップオーバーヘッドが完了します。

これを修正するには、2つの簡単な方法があります。

  • は、アプリを起動し、どこでもそれを使用する場合、単一のセッションを作成します。
  • 共有セッション([NSURLSession sharedSession])を使用します。

バックグラウンドダウンロードを行っている場合は、アプリを最初に起動してから再作成しないで、そのセッションを作成する必要があります(アプリがバックグラウンドで処理できるようにセッションを作成しない限りいくつかのタスクの結果は、IIRCのセッションが無効になるため、通常の方法でアプリケーションが起動された場合に再作成されます。

関連する問題