TServer

Apache のようにあらかじめ複数のプロセスを起動して接続を待ち受けるネットワークサーバプログラムを簡単に作れるようにするためのライブラリです。

必要なもの

ライセンス

このプログラムは Ruby ライセンスに従います。

機能

あらかじめ複数のプロセスを起動しておくことができます(デフォルト 5)。 すべてのプロセスがクライアントから接続されている時に新たな接続がされた場合は、自動的に新しいプロセスが起動します(最大プロセス数のデフォルト 50)。 各プロセスは接続が切断されても、次の接続のために生き続けますが、ある数だけ接続を処理すると死にます(デフォルト 50)。 また、接続が切断してから、新しい接続が一定時間来なくても死にます(でふぉると 100秒)。

親プロセスは次のシグナルを特別に扱います(次期バージョンでこの機能はなくなります)。

SIGTERM
子プロセスをすべて終了させて自分も死にます。接続中の子プロセスは接続が切れるまで終了しません。
SIGHUP
子プロセスをすべて終了させて新たな子プロセスを起動します。接続中の子プロセスは接続が切れるまで終了しません。
SIGINT
子プロセスをすべて終了させて自分も死にます。接続中の子プロセスも強制的に終了させます。

使用例

以下はポート8888で起動し、クライアントに現在時刻を返すプログラムです。

require "tserver"
ts = TServer.new(8888)
ts.start do |s|
  s.puts Time.now
end

クラスメソッド

TServer.new(port)
ポートport で accept する TServer オブジェクトを返します。
TServer.new(IPaddr, port)
IPアドレス IPaddr のポート port で accept する TServer オブジェクトを返します。
TServer.new(socket, ...)
ソケット socket で accept する TServer オブジェクトを返します。socket は複数指定可能です。

インスタンスメソッド

TServer#start {|s| ...}
accept を開始します。クライアントから接続された場合はブロックが実行されます。 ブロック引数は通信用ソケット(accept の戻り値)です。
TServer#stop
ループを抜け出し、start から復帰します。
TServer#close
TServer.new で開いたソケットを閉じます。
TServer#sock
ソケットを返します。複数のソケットで動作している場合は最初のものを返します。
TServer#socks
ソケットの配列を返します。
TServer#min_servers, TServer#min_servers=n
最小サーバプロセス数を返し/設定します。 サーバプロセス数がこの値以下になった場合は、この値までプロセスを起動します。
TServer#max_servers, TServer#max_servers=n
最大サーバプロセス数を返し/設定します。 サーバプロセス数はこの値以上には起動しません。
TServer#max_request_per_child, TServer#max_request_per_child=n
TServer#max_use, TServer#max_use=n
1プロセスあたりの最大接続数を返し/設定します。 この回数分の接続を処理したプロセスは終了します。 0 に設定すると終了しません。
TServer#max_idle, TServer#max_idle=n
一度でも接続を処理した子プロセスは、接続待ち時間がこの値を超えると終了します。
TServer#on_child_start{...}, TServer#on_child_start=proc
子プロセス生成時にブロックまたは proc を実行します。 proc は Proc クラスのインスタンスです。
TServer#on_child_stop{...}, TServer#on_child_exit=proc
子プロセス終了時にブロックまたは proc を実行します。 proc は Proc クラスのインスタンスです。
TServer#terminate
子プロセスを終了させます。接続中の子プロセスは接続が切れるまで終了しません。
TServer#interrupt
子プロセスを終了させます。接続中の子プロセスも強制的に終了させます。
TServer#handle_signal, TServer#handle_signal=flag
TServer 内部でシグナル(HUP,INT,TERM)を処理するかどうかを真偽値で指定します。 デフォルトは true です。
TServer#logging=flag
flagが偽(false, nil)の場合はログを出力しません。 flagが :syslog の場合で、Syslog.opened? が真の場合に、info レベルで syslog にログを出力します。 それ以外の場合は、ログを標準エラー出力に出力します。 デフォルトは false です。

履歴

0.2.1 2004/05/20
0.2 2004/03/21
0.1.2 2004/05/18
0.1.1 2004/03/02
0.1 2004/02/25
0.0.8 2003/06/17
0.0.7 2003/04/27
0.0.6 2003/04/17
0.0.5 2002/12/03
0.0.4 2002/12/01
0.0.3 2002/11/20
0.0.2 2002/11/12
0.0.1 2002/11/11

とみたまさひろ

Last modified: Thu May 20 11:20:42 JST 2004