PreFork
あらかじめ複数のプロセスを起動して接続を待ち受けるネットワークサーバプログラムを簡単に作れるようにするためのライブラリです。
以前は TServer という名前でした。
ダウンロード
必要なもの
ライセンス
このプログラムは Ruby ライセンスに従います。
機能
- あらかじめ複数のプロセスを起動しておくことができます(デフォルト 5)。
- すべてのプロセスがクライアントから接続されている時に新たな接続がされた場合は、自動的に新しいプロセスが起動します(最大プロセス数のデフォルト 50)。
- 各プロセスは接続が切断されても、次の接続のために生き続けますが、ある数だけ接続を処理すると死にます(デフォルト 50)。
- また、接続が切断してから、新しい接続が一定時間来なくても死にます(デフォルト 100秒)。
使用例
以下はポート8888で起動し、クライアントに現在時刻を返すプログラムです。
require "prefork"
pf = PreFork.new(8888)
pf.start do |s|
s.puts Time.now
end
クラスメソッド
- PreFork.new(port)
-
ポートport で accept する PreFork オブジェクトを返します。
-
PreFork.new(IPaddr, port)
-
IPアドレス IPaddr のポート port で accept する PreFork オブジェクトを返します。
- PreFork.new(socket, ...)
-
ソケット socket で accept する PreFork オブジェクトを返します。socket は複数指定可能です。
インスタンスメソッド
- PreFork#start {|s| ...}
-
accept を開始します。クライアントから接続された場合はブロックが実行されます。
ブロック引数は通信用ソケット(accept の戻り値)です。
- PreFork#stop
-
ループを抜け出し、start から復帰します。
- PreFork#close
-
PreFork.new で開いたソケットを閉じます。
- PreFork#sock
-
ソケットを返します。複数のソケットで動作している場合は最初のものを返します。
- PreFork#socks
-
ソケットの配列を返します。
- PreFork#min_servers, PreFork#min_servers=n
-
最小サーバプロセス数を返し/設定します。
サーバプロセス数がこの値以下になった場合は、この値までプロセスを起動します。
- PreFork#max_servers, PreFork#max_servers=n
-
最大サーバプロセス数を返し/設定します。
サーバプロセス数はこの値以上には起動しません。
- PreFork#max_request_per_child, PreFork#max_request_per_child=n
- PreFork#max_use, PreFork#max_use=n
-
1プロセスあたりの最大接続数を返し/設定します。
この回数分の接続を処理したプロセスは終了します。
0 に設定すると終了しません。
- PreFork#max_idle, PreFork#max_idle=n
-
一度でも接続を処理した子プロセスは、接続待ち時間がこの値を超えると終了します。
- PreFork#on_child_start{...}, PreFork#on_child_start=proc
-
子プロセス生成時にブロックまたは proc を実行します。
proc は Proc クラスのインスタンスです。
- PreFork#on_child_exit{...}, PreFork#on_child_exit=proc
-
子プロセス終了時にブロックまたは proc を実行します。
proc は Proc クラスのインスタンスです。
- PreFork#terminate
-
子プロセスを終了させます。接続中の子プロセスは接続が切れるまで終了しません。
- PreFork#interrupt
-
子プロセスを終了させます。接続中の子プロセスも強制的に終了させます。
- PreFork#logging=flag
-
flagが偽(false, nil)の場合はログを出力しません。
flagが :syslog の場合で、Syslog.opened? が真の場合に、info レベルで syslog にログを出力します。
それ以外の場合は、ログを標準エラー出力に出力します。
デフォルトは false です。
履歴
- 0.3.2a 2005/01/17
-
- 0.3.2 2005/01/06
-
- 0.3.1 2004/11/02
-
- accept 時にECONNABORTED, ECONNREFUSED, ECONNRESET を無視するようにした。
- 0.3 2004/09/11
-
- 名前を TServer から PreFork に変更。
- SIGTERM, SIGHUP, SIGINT を処理しないようにした。
- 0.2.1 2004/05/20
-
- TServer.logging 機能の追加。
- 子プロセスの回収処理を変更。SIGCHLD を扱わないようにした。
- 0.2 2004/03/21
-
- 内部構造を大きく変更。
- stop, close, terminate, interrupt, handle_signal メソッドの追加。
- on_child_start, on_child_exit でブロックも受け付けるようにした。
- 0.1.2 2004/05/18
-
- $tserver_debug = true で、標準エラー出力にログを出力するようにした。
- 子プロセスの回収処理を変更。SIGCHLD を扱わないようにした。
- 0.1.1 2004/03/02
-
- 0.1 2004/02/25
-
- SIGUSR1 を取り扱わないようにした。
- accept が競合しないようにロックファイルを使用するようにした。
- 親子間の通信に個別の pipe を使うようにした。
- 0.0.8 2003/06/17
-
- 複数のソケットを処理できるようにした。
- 子プロセスの終了時に exit ではなく exit! を使用するようにした。
- 0.0.7 2003/04/27
-
- Solaris で EAGAIN エラーになる問題を修正。
- 0.0.6 2003/04/17
-
- TServer::new の引数で BasicSocket, Socket も受け付けるようにした。
- SIGTERM, SIGHUP で接続中の子プロセスを終了させないようにした。
- SIGINT で強制的に子プロセスを終了させるようにした。
- 子プロセス終了時に、ごく稀に親プロセスが異常終了するバグの修正。
- 親プロセス終了時に、子プロセスが残る場合があるバグの修正。
- 0.0.5 2002/12/03
-
- on_child_start, on_child_exit 追加
- 0.0.4 2002/12/01
-
- max_use 追加
- 子プロセス起動のタイミングを変更
- 0.0.3 2002/11/20
-
- 0.0.2 2002/11/12
-
- TERM,CHLD,HUP,USR1 に対するシグナルハンドラが事前に登録されている場合は、TServer の処理後にそれを呼び出すようにした。
- 0.0.1 2002/11/11
-
とみたまさひろ
Last modified: Thu Jan 6 08:19:49 JST 2005