HTTPエージェントによる HTTPリクエストの管理

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フォーラムにお寄せください。

Nicolas Brachfogel
- プロダクトオーナー & シニアデベロッパー - Nicolas Brachfogelは、2017年にシニアデベロッパーとして4Dに入社しました(4D Serverとネットワークを担当)。Apple Siliconのリリースを管理するプロダクトオーナーとして、ユーザーストーリーを書いて機能仕様に落とし込み、機能実装が顧客のニーズを満たしているかを確認する役割を担っています。Institut Supérieur d'Informatique Appliquée (INSIA) を卒業した Nicolas は、2001年にソフトウェア開発者としてのキャリアをスタートさせました。JavaとC++で数年間コーディングした後、ゲーム会社のクライアント・サーバー開発を専門に担当。サーバー開発者/アーキテクトとして、多くのゲーム(Dofus Arena、Drakerz、Trivial Pursuit Go!)のサーバーアーキテクチャに携わり、成功を収めてきました。