4D 19 R6 では、HTTPクライアントコマンドの構文を近代化し、機能を強化するために、HTTPクラスを導入しました。これをベースに、4D 20 R6 では強力な新機能を追加しました: HTTPエージェントの登場です。これらのエージェントは、HTTPリクエストの接続の持続性と再利用を管理することで、HTTPサーバーへの接続のカスタマイズ・最適化を可能にします。
HDI: HTTPエージェントによるHTTPリクエストの管理
HTTPエージェントを理解する
同じ HTTPサーバーに対して複数のリクエストを実行する必要がある場合、クライアントとサーバーの両方に対してリクエストを最適化したいと思うかもしれません。そのための一般的な方法の一つは、(とくにセキュアな接続を使う場合に) リクエスト間で新しい接続をネゴシエーションをする必要がないよう、すべてのリクエストに対して一つの接続を維持することです。
そこで、エージェントが役に立ちます。エージェントは接続の再利用を管理し、リクエストを最適化します。
まず重要なことは、コードを何も変更しなくても、エージェントの恩恵を受けられるということです。エージェントを指定しなければ、HTTPRequest を使ったリクエストはデフォルトのエージェントを使用します。このデフォルトエージェントは、単純なキープアライブメカニズムによって接続の持続性を管理します。そのため、同じサーバーに複数のリクエストを送信する場合、リクエストごとに新しい接続を作成するのではなく、可能であれば接続を再利用します。
このデフォルトエージェントは、想像できる限り最もシンプルなものですが、独自のエージェントを作成することもできます (そして、作成すべきです)。エージェントを使うことで、キープアライブメカニズムを制御したり、特定のサーバーへの最大同時接続数を指定したり、接続を無期限に維持しないためのタイムアウトを追加したり、あるいは TLS/SSL接続を設定したりと、こういった設定を HTTPRequest 毎に都度おこなうのではなく、エージェントレベルで調整することができます。
HTTPRequest にエージェントを指定するのは非常に簡単です:
var $requestOptions:={/*ここにエージェントのオプションを指定します*/}
var $myAgent:=4D.HTTPAgent.new($requestOptions)
var $requestOptions:={}
$requestOptions.agent:=$myAgent
var $myRequest:=4D.HTTPRequest.new("www.4D.com"; $requestOptions)
Tip1
HTTPAgent は共有オブジェクトです。したがって、同じサーバーへのすべてのリクエストに同じエージェントを使用するために、シングルトンクラスに追加することができます。
TIP2
同じエージェントを使って複数のサーバーにリクエストすることができます。その場合、各サーバーは同じエージェントオプションを使用した独自の接続プールを持つことになります。
エージェンの実装によって、HTTPクラスは HTTPコマンドのすべての機能をカバーするだけでなく、さらに機能が強化されました。これは、新しいシンタックスに切り替える良い機会と言えるでしょう。
HTTPクラスやエージェントに関する質問があれば、遠慮なく 4Dフォーラムにお寄せください。