NAME
Mojo::Server::Hypnotoad - ALL GLORY TO THE HYPNOTOAD!
SYNOPSIS
use Mojo::Server::Hypnotoad;
my $toad = Mojo::Server::Hypnotoad->new;
$toad->run('myapp.pl', 'hypnotoad.conf');
DESCRIPTION
Mojo::Server::Hypnotoad is a full featured UNIX optimized preforking async io HTTP 1.1 and WebSocket server built around the very well tested and reliable Mojo::Server::Daemon with TLS, Bonjour, epoll, kqueue and hot deployment support that just works.
Optional modules IO::KQueue, IO::Epoll, IO::Socket::SSL and Net::Rendezvous::Publish are supported transparently and used if installed.
Note that this module is EXPERIMENTAL and might change without warning!
See Mojolicious::Guides::Cookbook for deployment recipes.
SIGNALS
You can control hypnotoad at runtime with signals.
Manager
INT,TERM-
Shutdown server immediately.
QUIT-
Shutdown server gracefully.
TTIN-
Increase worker pool by one.
TTOU-
Decrease worker pool by one.
USR2-
Attempt zero downtime software upgrade (hot deployment) without losing any incoming connections.
Manager (old) |- Worker [1] |- Worker [2] |- Worker [3] |- Worker [4] `- Manager |- Worker [1] |- Worker [2] |- Worker [3] `- Worker [4]The new manager will automatically send a
QUITsignal to the old manager and take over serving requests after starting up successfully.
Worker
CONFIGURATION
Hypnotoad configuration files are normal Perl scripts returning a hash.
# hypnotoad.conf
{listen => ['http://*:3000', 'http://*:4000'], workers => 10};
The following parameters are currently available.
- accepts
-
accepts => 100Maximum number of connections a worker is allowed to accept before stopping gracefully, defaults to
1000. Setting the value to0will allow workers to accept new connections infinitely. - backlog
-
backlog => 128Listen backlog size, defaults to
SOMAXCONN. - clients
-
clients => 100Maximum number of parallel client connections per worker process, defaults to
1000. - graceful_timeout
-
graceful_timeout => 15Time in seconds a graceful worker stop may take before being forced, defaults to
30. - group
-
group => 'staff'Group name for worker processes.
- heartbeat_interval
-
heartbeat_interval => 3Heartbeat interval in seconds, defaults to
5. - heartbeat_timeout
-
heartbeat_timeout => 5Time in seconds before a worker without a heartbeat will be stopped, defaults to
2. - keep_alive_requests
-
keep_alive_requests => 50Number of keep alive requests per connection, defaults to
25. - keep_alive_timeout
-
keep_alive_timeout => 10Time in seconds a connection may be idle, defaults to
5. - listen
-
listen => ['http://*:80']List of ports and files to listen on, defaults to
http://*:8080. - lock_file
-
lock_file => '/tmp/hypnotoad.lock'Full path to accept mutex lock file, defaults to a random temporary file.
- pid_file
-
pid_file => '/var/run/hypnotoad.pid'Full path to PID file, defaults to
hypnotoad.pidin the same directory as the application. - proxy
-
proxy => 1Activate reverse proxy support, defaults to the value of
MOJO_REVERSE_PROXY. - upgrade_timeout
-
upgrade_timeout => 15Time in seconds a zero downtime software upgrade may take before being aborted, defaults to
30. - user
-
user => 'sri'User name for worker processes.
- websocket_timeout
-
websocket_timeout => 150Time in seconds a WebSocket connection may be idle, defaults to
300. - workers
-
workers => 10Number of worker processes, defaults to
4. A good rule of thumb is two worker processes per cpu core.
METHODS
Mojo::Server::Hypnotoad inherits all methods from Mojo::Base and implements the following new ones.
run
$toad->run('script/myapp', 'hypnotoad.conf');
Start server.