Net-Server-0.85 > Net::Server::PreFork

名前

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_serversmin_spare_serversmax_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

Net::Serverを参照。

作者

Paul T. Seamons paul@seamons.com

謝辞

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