名前¶
Net::Server::PreFork - Net::Server personality
Net::Server::PreFork - Net::Serverのパーソナリティ
概要¶
use Net::Server::PreFork;
@ISA = qw(Net::Server::PreFork);
sub process_request {
#...コード...
}
__PACKAGE__->run();
説明¶
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 Net::Server::PreForkSimple.
まず始めにNet::ServerとNet::Server::PreForkSimpleのPODを読まれたし。 このモジュールはパーソナリティ(personality)、すなわちNet::Serverの サブクラスであるNet::Server::PreForkSimpleの拡張(サブクラス) である。Net::Server::PreForkSimple参照。
This personality binds to one or more ports and then forks min_servers
child process. The server will make sure that at any given time there are min_spare_servers
available to receive a client request, up to max_servers
. Each of these children will process up to max_requests
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).
このパーソナリティは一つ以上のポートにbindし、それから、 min_servers
個の子プロセスをforkする。サーバは常に min_spare_servers
個の子サーバがクライアントリクエストを受け付ける ことができることを保証する(最大max_servers
)。この子プロセスは それぞれmax_requests
個までのクライアント接続を処理する。 このタイプはアクセスの激しいサイトに適しており、ほとんどの アプリケーションに適したスケールであろう。(複数ポートの受け付けには デフォルトでflockを使って子プロセスを直列化する)
サンプルコード¶
Please see the sample listed in Net::Server.
Net::Serverにあげたサンプルを見て頂きたい。
コマンドライン引数¶
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 Net::Server::PreForkSimple.
ベースとなるNet::Serverクラスと、親クラスである Net::Server::PreForkSimpleのコマンドライン引数に加えて、 Net::Server::PreForkはいくつかの設定用パラメータを含む。 本当に、Net::Server::PreForkSimpleも参照したほうがいい。
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
- min_servers
-
The minimum number of servers to keep running.
実行を続けるサーバの最小値。
- min_spare_servers
-
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.
リクエスト待ちのサーバの最小値。最小値と最大値を近づけすぎない 方が良い。さもないとサーバは頻繁に子プロセスをforkし、killする ことになる。
- max_spare_servers
-
The maximum number of servers to have waiting for requests. See min_spare_servers.
リクエスト待ちのサーバの最大値。min_spare_serversを見よ。
- max_servers
-
The maximum number of child servers to start. This does not apply to dequeue processes.
開始する子サーバの最大値。dequeueプロセスには適用されない。
- check_for_waiting
-
Seconds to wait before checking to see if we can kill off some waiting servers.
待機サーバをkillできるかどうかチェックするまでの待ち時間の秒数。
- child_communication
-
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}.
unixソケットを通じて親プロセスとやりとりすることを可能にする。 真値がセットされると、$self->{server}->{parent_sock}に含まれる ソケットに子プロセスが書き込めるようになる。親プロセスは、 第一引数が子プロセスへのソケットとなるchild_is_talking_hookを 通じてnotifyされる。子プロセスのソケットは $self->{server}->{children}->{$child_pid}->{sock}に保存される。
設定ファイル¶
Net::Server::PreFork
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.
Net::Server::PreFork
はサーバのパラメータを読み込むために 設定ファイルを利用することができる。設定ファイルの書式は 単純なキーと値の組だ。コメントと空白は無視される。
#-------------- 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 --------------
処理の流れ¶
Process flow follows Net::Server until the loop phase. At this point min_servers
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 min_servers
, min_spare_servers
, max_spare_servers
, and max_servers
.
処理の流れはloop段階までNet::Serverと同じである。 この時点でmin_servers
個のプロセスがforkされて接続待機に 入る。子プロセスが接続を受け付けるとき、クライアントの処理を 終えるとき、exitするとき、その情報は親プロセスに中継される。 これにより親プロセスは追跡し、min_servers
、 min_spare_servers
、max_spare_servers
、そしてmax_servers
が 満たされるに十分な子プロセスがあることを保証する。
HOOKS¶
The PreFork server has the following hooks in addition to the hooks provided by PreForkSimple. See Net::Server::PreForkSimple.
PreForkサーバはPreForkSimpleの提供するhookに以下のものを付け加える。 Net::Server::PreForkSimpleを参照。
$self->parent_read_hook()
-
This hook occurs any time that the parent reads information from the child. The line from the child is sent as an argument.
このhookは、親プロセスが子プロセスから情報を読む際に常に 発生する。子プロセスからのラインが引数として送られる。
$self->child_is_talking_hook()
-
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.
このhookは、child_communicationが真で、かつ、その子プロセスが $self->{server}->{parent_sock}に書き込むときに発生する。 第一引数は子プロセスに開かれたソケットである。
TO DO¶
See Net::Server
Net::Serverを参照。
作者¶
Paul T. Seamons paul@seamons.com
謝辞¶
See Net::Server
Net::Serverを参照。
参考¶
Please see also
以下も参照して頂きたい。
Net::Server::Fork, Net::Server::INET, Net::Server::PreForkSimple, Net::Server::MultiType, Net::Server::Single Net::Server::SIG Net::Server::Daemonize Net::Server::Proto