Mojo::Server::Daemon - ノンブロッキングI/OのHTTPとWebSocketのサーバー
使い方
use Mojo::Server::Daemon; my $daemon = Mojo::Server::Daemon->new(listen => ['http://*:8080']); $daemon->unsubscribe('request'); $daemon->on(request => sub { my ($daemon, $tx) = @_; # リクエスト my $method = $tx->req->method; my $path = $tx->req->url->path; # レスポンス $tx->res->code(200); $tx->res->headers->content_type('text/plain'); $tx->res->body("$method request for $path!"); # トランザクションのレジューム $tx->resume; }); $daemon->run;
説明
Mojo::Server::Daemonは完全な機能を持つノンブロッキングIOのHTTPとWebSocket のサーバーです。IPv6
, TLS
, コメット(ロングポーリング), キープアライブ, 複数のイベントループをサポートしています。
よりよいスケーラビリティ(epoll, kqueue)、ノンブロッキングの名前解決、 SOCK5、TLSサポートも以下のモジュールによってサポートされます。 オプションのモジュールとしてEV(4.0+), Net::DNS::Native (0.15+) IO::Socket::SSL(2.009+),IO::Socket::Socks (0.64+)が 透過的にサポートされ、インストールされていれば利用されます。 個々の機能はMOJO_NO_NDN
、MOJO_NO_IPV6
とMOJO_NO_TLS
環境変数で無効にすることもできます。
デプロイメントのレシピについてはMojolicious::Guides::Cookbook を見てください。
シグナル
Mojo::Server::Daemonプロセスは次のシグナルによって実行時にコントロール可能です。
INT, TERM
すぐにサーバーをシャットダウンする。
イベント
Mojo::Server::DaemonはMojo::Serverのすべてのイベントを継承しています。
属性
Mojo::Server::DaemonはMojo::Serverのすべてのメソッドを 実装しており、次の新しいメソッドを実装しています。
acceptors
my $acceptors = $daemon->acceptors; $daemon = $daemon->acceptors(['6be0c140ef00a389c5d039536b56d139']);
アクティブなアクセプター。
backlog
my $backlog = $daemon->backlog; $daemon = $daemon->backlog(128);
リッスンバックログサイズ。デフォルトはSOMAXCONN
。
inactivity_timeout
my $timeout = $daemon->inactivity_timeout; $daemon = $daemon->inactivity_timeout(5);
接続がドロップする前に非アクティブでいることができる最大の秒数。 デフォルトはc15
です。 この値を0
に設定すると無限に非アクティブでいます。
ioloop
my $loop = $daemon->ioloop; $daemon = $daemon->ioloop(Mojo::IOLoop->new);
サーバーのIOのためのイベントループ。 デフォルトはMojo::IOLoopのシングルトン。
listen
my $listen = $daemon->listen; $daemon = $daemon->listen(['https://127.0.0.1:8080']);
ポートのリストとリッスンのためのファイル。 デフォルトはhttp://*:3000
(http://0.0.0.0:3000
のショートカット)。
# すべてのIPv4インターフェースでリッスン $daemon->listen(['http://*:3000']); # すべてのIPv4とIPv6のインターフェースでリッスン $daemon->listen(['http://[::]:3000']); # IPv6インターフェースでリッスン $daemon->listen(['http://[::1]:4000']); # IPv4とIPv6インターフェースでリッスン $daemon->listen(['http://127.0.0.1:3000', 'http://[::1]:3000']); # 同じポート(SO_REUSEPORT)を使うために、複数のサーバーを許可する $daemon->listen(['http://*:8080?reuse=1']); # 同時にHTTPとHTTPSの二つのポートでリッスン $daemon->listen(['http://*:3000', 'https://*:4000']); # カスタムのサーバー証明書とキーを使う $daemon->listen(['https://*:3000?cert=/x/server.crt&key=/y/server.key']); # さらにカスタムの認証局を使う $daemon->listen( ['https://*:3000?cert=/x/server.crt&key=/y/server.key&ca=/z/ca.crt']);
以下のパラメータが現在は利用可能です。
ca
-
ca=/etc/tls/ca.crt
TLS認証局ファイルへのパス。
cert
-
cert=/etc/tls/server.crt
TLS証明書ファイルへのパス。デフォルトは組み込みの証明書です。
- ciphers
-
ciphers=AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
TLSチッパー仕様の文字列。さらなるフォーマットについての情報は以下をみてください。
https://www.openssl.org/docs/manmaster/apps/ciphers.html#CIPHER-STRINGS.
- fd
-
fd=3
すでに準備されているリッスンソケットのファイルディスクリプタ
key
-
key=/etc/tls/server.key
TLSキーファイルへのパス。デフォルトは組み込みの試験用のキーです。
- reuse
-
reuse=1
SO_REUSEPORT
ソケットオプションで同じポートを使うために、複数のサーバーを許可する - single_accept
-
single_accept=1
一度に一つだけの接続を受け入れる
verify
-
verify=0x00
TLSバリフィケーションモード。デフォルトは
0x03
。 - version
-
version=TLSv1_2
TLSプロトコルのバージョン。
max_clients
my $max_clients = $daemon->max_clients; $daemon = $daemon->max_clients(1000);
このサーバーが、新しく来る接続を受け入れを停止する前に。 扱うことを許可する 並列のクライアントの接続の最大数。 一緒に、Mojo::IOLoopのmax_connections
が渡されます。
max_requests
my $max = $daemon->max_requests; $daemon = $daemon->max_requests(250);
コネクションあたりのキープアライブリクエストの最大数。 デフォルトは25
。
silent
my $bool = $daemon->silent; $daemon = $daemon->silent($bool);
コンソールのメッセージを無効にする。
メソッド
Mojo::Server::DaemonはMojo::Serverのすべてのメソッドを 継承しとり、次の新しいメソッドを実装しています。
ports
my $ports = $daemon->ports;
このサーバーが現在リッスンしているすべてのポートを取得
# すべてのポート say for @{$daemon->ports};
run
$daemon->run;
サーバーを実行します。
start
$daemon->start;
接続の受け入れを開始します。
# ランダムポートでリッスン my $port = $daemon->listen(['http://127.0.0.1'])->start->ports->[0]; # 並列に複数のWebサーバーを実行する my $daemon1 = Mojo::Server::Daemon->new(listen => ['http://*:3000'])->start; my $daemon2 = Mojo::Server::Daemon->new(listen => ['http://*:4000'])->start; Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
stop
$daemon = $daemon->stop;
接続の受け入れを停止します。
デバッグ
MOJO_DAEMON_DEBUG
環境変数を設定すると、詳細な情報をSTDERR
に出力することができます。
MOJO_DAEMON_DEBUG=1
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年5月28日更新)