=encoding euc-jp =head1 NAME =begin original Net::Server::PreFork - Net::Server personality =end original Net::Server::PreFork - Net::Serverのパーソナリティ =head1 概要 use Net::Server::PreFork; @ISA = qw(Net::Server::PreFork); sub process_request { #...コード... } __PACKAGE__->run(); =head1 説明 =begin original Please read the pod on Net::Server and Net::Server::PreForkSimple first. This module is a personality, or extension, or sub class, of the Net::Server::PreForkSimple class which is a sub class of Net::Server. See L. =end original まず始めにNet::ServerとNet::Server::PreForkSimpleのPODを読まれたし。 このモジュールはパーソナリティ(personality)、すなわちNet::Serverの サブクラスであるNet::Server::PreForkSimpleの拡張(サブクラス) である。L参照。 =begin original This personality binds to one or more ports and then forks C child process. The server will make sure that at any given time there are C available to receive a client request, up to C. Each of these children will process up to C client connections. This type is good for a heavily hit site, and should scale well for most applications. (Multi port accept is accomplished using flock to serialize the children). =end original このパーソナリティは一つ以上のポートにbindし、それから、 C個の子プロセスをforkする。サーバは常に C個の子サーバがクライアントリクエストを受け付ける ことができることを保証する(最大C)。この子プロセスは それぞれC個までのクライアント接続を処理する。 このタイプはアクセスの激しいサイトに適しており、ほとんどの アプリケーションに適したスケールであろう。(複数ポートの受け付けには デフォルトでflockを使って子プロセスを直列化する) =head1 サンプルコード =begin original Please see the sample listed in Net::Server. =end original Net::Serverにあげたサンプルを見て頂きたい。 =head1 コマンドライン引数 =begin original In addition to the command line arguments of the Net::Server base class and the Net::Server::PreForkSimple parent class, Net::Server::PreFork contains several other configurable parameters. You really should also see L. =end original ベースとなるNet::Serverクラスと、親クラスである Net::Server::PreForkSimpleのコマンドライン引数に加えて、 Net::Server::PreForkはいくつかの設定用パラメータを含む。 本当に、Lも参照したほうがいい。 Key Value Default min_servers \d+ 5 min_spare_servers \d+ 2 max_spare_servers \d+ 10 max_servers \d+ 50 max_requests \d+ 1000 serialize (flock|semaphore|pipe) undef # multi_portかSolarisでの直列化はflockがデフォルト lock_file "filename" POSIX::tmpnam check_for_dead \d+ 30 check_for_waiting \d+ 10 max_dequeue \d+ undef check_for_dequeue \d+ undef child_communication 1 undef =over 4 =item min_servers =begin original The minimum number of servers to keep running. =end original 実行を続けるサーバの最小値。 =item min_spare_servers =begin original The minimum number of servers to have waiting for requests. Minimum and maximum numbers should not be set to close to each other or the server will fork and kill children too often. =end original リクエスト待ちのサーバの最小値。最小値と最大値を近づけすぎない 方が良い。さもないとサーバは頻繁に子プロセスをforkし、killする ことになる。 =item max_spare_servers =begin original The maximum number of servers to have waiting for requests. See I. =end original リクエスト待ちのサーバの最大値。Iを見よ。 =item max_servers =begin original The maximum number of child servers to start. This does not apply to dequeue processes. =end original 開始する子サーバの最大値。dequeueプロセスには適用されない。 =item check_for_waiting =begin original Seconds to wait before checking to see if we can kill off some waiting servers. =end original 待機サーバをkillできるかどうかチェックするまでの待ち時間の秒数。 =item child_communication =begin original Enable child communication to parent via unix sockets. If set to true, will let children write to the socket contained in $self->{server}->{parent_sock}. The parent will be notified through child_is_talking_hook where the first argument is the socket to the child. The child's socket is stored in $self->{server}->{children}->{$child_pid}->{sock}. =end original unixソケットを通じて親プロセスとやりとりすることを可能にする。 真値がセットされると、$self->{server}->{parent_sock}に含まれる ソケットに子プロセスが書き込めるようになる。親プロセスは、 第一引数が子プロセスへのソケットとなるchild_is_talking_hookを 通じてnotifyされる。子プロセスのソケットは $self->{server}->{children}->{$child_pid}->{sock}に保存される。 =back =head1 設定ファイル =begin original C allows for the use of a configuration file to read in server parameters. The format of this conf file is simple key value pairs. Comments and white space are ignored. =end original Cはサーバのパラメータを読み込むために 設定ファイルを利用することができる。設定ファイルの書式は 単純なキーと値の組だ。コメントと空白は無視される。 #-------------- file test.conf -------------- ### サーバ情報 min_servers 20 max_servers 80 min_spare_servers 10 min_spare_servers 15 max_requests 1000 ### 変更されるuserとgroup user somebody group everybody ### ログを記録するか? log_file /var/log/server.log log_level 3 pid_file /tmp/server.pid ### アクセスコントロール allow .+\.(net|com) allow domain\.com deny a.+ ### バックグラウンドで実行するか? background 1 ### bindするポート host 127.0.0.1 port localhost:20204 port 20205 ### 逆引きをするか? # reverse_lookups on ### 子プロセスコミュニケーションを有効にするか? # child_communication #-------------- file test.conf -------------- =head1 処理の流れ =begin original Process flow follows Net::Server until the loop phase. At this point C are forked and wait for connections. When a child accepts a connection, finishs processing a client, or exits, it relays that information to the parent, which keeps track and makes sure there are enough children to fulfill C, C, C, and C. =end original 処理の流れはloop段階までNet::Serverと同じである。 この時点でC個のプロセスがforkされて接続待機に 入る。子プロセスが接続を受け付けるとき、クライアントの処理を 終えるとき、exitするとき、その情報は親プロセスに中継される。 これにより親プロセスは追跡し、C、 C、C、そしてCが 満たされるに十分な子プロセスがあることを保証する。 =head1 HOOKS =begin original The PreFork server has the following hooks in addition to the hooks provided by PreForkSimple. See L. =end original PreForkサーバはPreForkSimpleの提供するhookに以下のものを付け加える。 Lを参照。 =over 4 =item C<$self-Eparent_read_hook()> =begin original This hook occurs any time that the parent reads information from the child. The line from the child is sent as an argument. =end original このhookは、親プロセスが子プロセスから情報を読む際に常に 発生する。子プロセスからのラインが引数として送られる。 =item C<$self-Echild_is_talking_hook()> =begin original This hook occurs if child_communication is true and the child has written to $self->{server}->{parent_sock}. The first argument will be the open socket to the child. =end original このhookは、child_communicationが真で、かつ、その子プロセスが $self->{server}->{parent_sock}に書き込むときに発生する。 第一引数は子プロセスに開かれたソケットである。 =back =head1 TO DO =begin original See L =end original Lを参照。 =head1 作者 Paul T. Seamons paul@seamons.com =head1 謝辞 =begin original See L =end original Lを参照。 =head1 参考 Please see also 以下も参照して頂きたい。 L, L, L, L, L L L L