Perlbal::Manual::Hooks - Perlbalのホックがどう動作するか
Perlbal 1.78.
基本的に、ホックはPerlbalが処理するリクエストの中の特定の箇所で実行される小さなコードです。全ての種類のホックが利用可能で、それらは異なることをします。あるものはroleのいくつかにのみ適用可能で、あるものは特定のクラスにのみ適用可能です。各ホックを以下で詳しく説明しますが、まずはホックの基本について説明します。
一般的に the Perlbal::Service manpage 上で register_hook
メソッドを呼ぶことでホックを定義できます。どのホックに興味があるのかを指定し、ホックに特有のパラメータと一緒に呼び出されるサブルーチンへのリファレンスを提供します。
3つの種類のホックがあります。
グローバルスケールで定義されるホックがあります。以下のように設定されます:
Perlbal::register_global_hook('foo', sub { return 0; });
これにより、呼び出された時に0を返すfooという名前のグローバルホックが定義されます。(ホックのリターンコードは以下で説明されます)
グローバルホックは管理コマンドを定義するのに便利です。詳細については the Perlbal::Manual::Plugins manpage の下のmanage_command
を見てください。
ハンドラーホックは特定のサービスに取り付けられます。これらのホックは、ホックが1を返すまで一度に1回ずつ呼ばれます。1を返した時点で、それ以上のホックは呼ばれません。例えば:
$service->register_hook('bar', sub { # do something return 1; });
このホックが実行されると1を返し、必要なことは完了したとPerlbalにシグナルを送り、それ以上のホックを呼び出す必要が無いとPerlbalにシグナルを送ります。異なる種類のリクエストを処理するプラグインのセットを作成するためにこの種類のホックを使うことができます。一つのホックがリクエストを処理するとそのリクエストに関して他のホックに呼びかけ続けないでしょう。
バックエンドがクライアントに割り当てられた直後に起きますが、バックエンドに話しかける前に何かすることが無いかを尋ねます。trueを返すと、プロセスは停止し、手動でクライアントのリクエストをバックエンド送信したりしなければならないでしょう。
the Perlbal::BackendHTTP manpage の中で呼ばれます。
role reverse_proxy
で利用可能です。
バックエンドが応答を送信し始める時。
the Perlbal::BackendHTTP manpage の中で呼ばれます。
全てのroleで利用可能です。
応答ヘッダがバックエンドから読み出された直後に呼ばれます。trueを返すと、その時点で処理している全てを停止するでしょう。
the Perlbal::BackendHTTP manpage の中で呼ばれます。
全てのroleで利用可能です。
バックエンドがリクエストを受け取る準備ができた時。
the Perlbal::BackendHTTP manpage の中で呼ばれます。
全てのroleで利用可能です。
Called when a missing file was requested in a request for multiple files concatenated, right before sending the 404 response. 接続に追いつくにはtrueを返します。
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
role web_server
で利用可能です。
concat_get_poststat_pre_send
, static_get_poststat_file_missing
および static_get_poststat_pre_send
も見てください。
Called when the resulting file of a request for multiple files concatenated is about to be sent, right before the 200 response code is added as a header. 接続に追いつくにはtrueを返します。
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
role web_server
で利用可能です。
concat_get_poststat_file_missing
, static_get_poststat_file_missing
および static_get_poststat_pre_send
を見てください。
PUTリクエストを扱う時に呼ばれます。
the Perlbal::ClientHTTP manpageの中で呼ばれます。
role web_server
で利用可能です。
リクエストが受け取られ、このリクエストが高優先度かそうでないかを決めようとする直前に呼ばれます。Return a true value to make the request high priority; false to leave it alone. これはクッキーの優先度スケジュールによってリクエストが既に高優先度になっていない時にのみ呼ばれることに注意してください。これはthe Perlbal::Service manpageの中で行われます。
the Perlbal::ClientProxy manpageの中で呼ばれます。
全てのroleで利用可能です。
リクエストが受け取られ、このリクエストが高優先度かそうでないかを決めようとする直前に呼ばれます。Return a true value to make the request low priority; false to leave it alone.
the Perlbal::ClientProxy manpageの中で呼ばれます。
全てのroleで利用可能です。
全てのヘッダを設定しファイルを提供しようとする時に呼ばれます。この時点で応答ヘッダを変更または追加することができます。あるいはtrueを返すことでプロセスを停止することができます。プロセスを中止した時には自分自身でクライアントに応答を送信する必要があるでしょう。
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
role web_server
で利用可能です。
リクエストをバックエンドに送信する前にリクエストを呼び出します。
the Perlbal::ClientProxy manpageの中で呼ばれます。
全てのroleで利用可能です。
何か出力するデータがある時に呼ばれます。
the Perlbal::ClientHTTP manpageの中で呼ばれます。
role web_server
で利用可能です。
ファイルのreproxyが完了し、ファイルハンドルを閉じようとする時に呼ばれます。trueを返すことで処理を停止することができます(その場合、自分自身で reproxy_fh を閉じる必要があるでしょう)。
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
role web_server
で利用可能です。
応答ヘッダがreproxyされたバックエンドから読み込まれた時に呼ばれます。trueを返すと、その時点で処理している全てを停止するでしょう。
the Perlbal::ClientProxy manpageの中で呼ばれます。
role reverse_proxy
で利用可能です。
Called when a request has been finished, and control of the Client* object is about to be transferred back to ownership by a service selector. Return a true value if the perlbal core action in this situation should be bypassed.
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
全てのroleで利用可能です。
Called when we've been told to reproxy a file. trueを返すと、Perlbalはファイルに何も操作を行わず単に戻るでしょう。You can also change the file in the scalar ref passed as the second parameter.
Called in the Perlbal::ClientProxy manpage; receives $filename_ref
, a reference to the filename.
role reverse_proxy
で利用可能です。
webserverおよびproxyモードの両方で動作する一般的なホックで、特定の start_proxy_request
あるいは start_web_request
ホックのどちらかの後に実行します。Like those, you return true from this hook to takeover the connection.
the Perlbal::ClientProxy manpage および the Perlbal::ClientHTTP manpage の中で呼ばれます。
roles reverse_proxy
およびweb_server
の中で利用可能です。
userからのヘッダを読み込んですぐに、しかしバックエンド接続にリクエストする直前に呼ばれます。trueが返ると、Perlbalはバックエンドに要求しないでしょう。
the Perlbal::ClientProxy manpageの中で呼ばれます。
role reverse_proxy
で利用可能です。
ファイルを開いてsendfileを使うユーザに送信しようとする時に呼ばれます。デフォルトの送信を停止するにはtrueを返します。
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
role web_server
で利用可能です。
ローカルのファイルを提供しようとする時に、何か作業を終わらせる前に呼ばれます。$uri_ref
を変更することで提供するファイルを変更するか、trueを返すことでプロセスを停止することができます。
Called in the Perlbal::ClientHTTPBase manpage; receives $uri_ref
, a reference to the URI.
role web_server
で利用可能です。
サービスがヘッダを受け取り、それを提供しようとする時。webリクエストのデフォルトの処理を停止するにはtrueを返します。
the Perlbal::ClientHTTP manpageの中で呼ばれます。
role web_server
で利用可能です。
消失した静的ファイルが要求され、404応答を送信する直前に呼ばれます。接続に追いつくにはtrueを返します。
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
role web_server
で利用可能です。
concat_get_poststat_file_missing
, concat_get_poststat_pre_send
および static_get_poststat_pre_send
も見てください。
一つの静的なファイルが送信されようとし、ヘッダとして200応答コードが追加される直前に呼ばれます。接続に追いつくにはtrueを返します。
the Perlbal::ClientHTTPBase manpageの中で呼ばれます。
role web_server
で利用可能です。
concat_get_poststat_file_missing
, concat_get_poststat_pre_send
および static_get_poststat_file_missing
も見てください。
これらのホックは上と同じ方法で定義されますが、一般的なホックは全て実行されます。返りのコードは無視されます。これは、アクションあるいは影響を与える何かについての統計をコードに配置するのに便利です。
このホックはthe Perlbal::ClientProxy manpage オブジェクトが閉じられる時に呼ばれます。
role reverse_proxy
で利用可能です。
the Perlbal::Manual::Internals manpage, the Perlbal::Manual::Plugins manpage.