名前

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にシグナルを送ります。異なる種類のリクエストを処理するプラグインのセットを作成するためにこの種類のホックを使うことができます。一つのホックがリクエストを処理するとそのリクエストに関して他のホックに呼びかけ続けないでしょう。

backend_client_assigned

バックエンドがクライアントに割り当てられた直後に起きますが、バックエンドに話しかける前に何かすることが無いかを尋ねます。trueを返すと、プロセスは停止し、手動でクライアントのリクエストをバックエンド送信したりしなければならないでしょう。

the Perlbal::BackendHTTP manpage の中で呼ばれます。

role reverse_proxy で利用可能です。

backend_readable_verify

バックエンドが応答を送信し始める時。

the Perlbal::BackendHTTP manpage の中で呼ばれます。

全てのroleで利用可能です。

backend_response_received

応答ヘッダがバックエンドから読み出された直後に呼ばれます。trueを返すと、その時点で処理している全てを停止するでしょう。

the Perlbal::BackendHTTP manpage の中で呼ばれます。

全てのroleで利用可能です。

backend_write_verify

バックエンドがリクエストを受け取る準備ができた時。

the Perlbal::BackendHTTP manpage の中で呼ばれます。

全てのroleで利用可能です。

concat_get_poststat_file_missing

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 も見てください。

concat_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 を見てください。

handle_put

PUTリクエストを扱う時に呼ばれます。

the Perlbal::ClientHTTP manpageの中で呼ばれます。

role web_server で利用可能です。

make_high_priority

リクエストが受け取られ、このリクエストが高優先度かそうでないかを決めようとする直前に呼ばれます。Return a true value to make the request high priority; false to leave it alone. これはクッキーの優先度スケジュールによってリクエストが既に高優先度になっていない時にのみ呼ばれることに注意してください。これはthe Perlbal::Service manpageの中で行われます。

the Perlbal::ClientProxy manpageの中で呼ばれます。

全てのroleで利用可能です。

make_low_priority

リクエストが受け取られ、このリクエストが高優先度かそうでないかを決めようとする直前に呼ばれます。Return a true value to make the request low priority; false to leave it alone.

the Perlbal::ClientProxy manpageの中で呼ばれます。

全てのroleで利用可能です。

modify_response_headers

全てのヘッダを設定しファイルを提供しようとする時に呼ばれます。この時点で応答ヘッダを変更または追加することができます。あるいはtrueを返すことでプロセスを停止することができます。プロセスを中止した時には自分自身でクライアントに応答を送信する必要があるでしょう。

the Perlbal::ClientHTTPBase manpageの中で呼ばれます。

role web_server で利用可能です。

proxy_read_request

リクエストをバックエンドに送信する前にリクエストを呼び出します。

the Perlbal::ClientProxy manpageの中で呼ばれます。

全てのroleで利用可能です。

put_writeout

何か出力するデータがある時に呼ばれます。

the Perlbal::ClientHTTP manpageの中で呼ばれます。

role web_server で利用可能です。

reproxy_fh_finished

ファイルのreproxyが完了し、ファイルハンドルを閉じようとする時に呼ばれます。trueを返すことで処理を停止することができます(その場合、自分自身で reproxy_fh を閉じる必要があるでしょう)。

the Perlbal::ClientHTTPBase manpageの中で呼ばれます。

role web_server で利用可能です。

reproxy_response_received

応答ヘッダがreproxyされたバックエンドから読み込まれた時に呼ばれます。trueを返すと、その時点で処理している全てを停止するでしょう。

the Perlbal::ClientProxy manpageの中で呼ばれます。

role reverse_proxy で利用可能です。

return_to_base

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で利用可能です。

start_file_reproxy

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 で利用可能です。

start_http_request

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 の中で利用可能です。

start_proxy_request

userからのヘッダを読み込んですぐに、しかしバックエンド接続にリクエストする直前に呼ばれます。trueが返ると、Perlbalはバックエンドに要求しないでしょう。

the Perlbal::ClientProxy manpageの中で呼ばれます。

role reverse_proxy で利用可能です。

start_send_file

ファイルを開いてsendfileを使うユーザに送信しようとする時に呼ばれます。デフォルトの送信を停止するにはtrueを返します。

the Perlbal::ClientHTTPBase manpageの中で呼ばれます。

role web_server で利用可能です。

start_serve_request

ローカルのファイルを提供しようとする時に、何か作業を終わらせる前に呼ばれます。$uri_refを変更することで提供するファイルを変更するか、trueを返すことでプロセスを停止することができます。

Called in the Perlbal::ClientHTTPBase manpage; receives $uri_ref, a reference to the URI.

role web_server で利用可能です。

start_web_request

サービスがヘッダを受け取り、それを提供しようとする時。webリクエストのデフォルトの処理を停止するにはtrueを返します。

the Perlbal::ClientHTTP manpageの中で呼ばれます。

role web_server で利用可能です。

static_get_poststat_file_missing

消失した静的ファイルが要求され、404応答を送信する直前に呼ばれます。接続に追いつくにはtrueを返します。

the Perlbal::ClientHTTPBase manpageの中で呼ばれます。

role web_server で利用可能です。

concat_get_poststat_file_missing, concat_get_poststat_pre_send および static_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 も見てください。

サービス一般ホック

これらのホックは上と同じ方法で定義されますが、一般的なホックは全て実行されます。返りのコードは無視されます。これは、アクションあるいは影響を与える何かについての統計をコードに配置するのに便利です。

end_proxy_request

このホックはthe Perlbal::ClientProxy manpage オブジェクトが閉じられる時に呼ばれます。

role reverse_proxy で利用可能です。

参照

the Perlbal::Manual::Internals manpage, the Perlbal::Manual::Plugins manpage.

TOP
inserted by FC2 system