PSGI/Plack server with event driven connection manager, preforking workers
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
t
.gitignore
.travis.yml
Build.PL
Changes
LICENSE
META.json
README.md
cpanfile

README.md

NAME

Monoceros - PSGI/Plack server with event driven connection manager, preforking workers

SYNOPSIS

% plackup -s Monoceros --max-keepalive-reqs=10000 --max-workers=2 -a app.psgi

DESCRIPTION

Monoceros is PSGI/Plack server supports HTTP/1.1. Monoceros has a event-driven connection manager and preforking workers. Monoceros can keep large amount of connection at minimal processes.

                                                      +--------+
                                                  +---+ worker |
      TCP       +---------+   UNIX DOMAIN SOCKET  |   +--------+
--------------- | manager | ----------------------+ 
                +---------+                       |   +--------+
<- keepalive ->              <-- passing fds -->  `---+ worker |
                                                      +--------+

Features of Monoceros

- a manager process based on AnyEvent keeps over C10K connections

- uses IO::FDPass for passing a file descriptor to workers

- supports HTTP/1.1 and also supports HTTP/1.0 keepalive

And this server inherit Starlet. Monoceros supports following features too.

- prefork and graceful shutdown using Parallel::Prefork

- hot deploy using Server::Starter

- fast HTTP processing using HTTP::Parser::XS (optional)

- accept4(2) using Linux::Socket::Accept4 (optional)

Currently, Monoceros does not support spawn-interval and max-keepalive-reqs.

COMMAND LINE OPTIONS

In addition to the options supported by plackup, Monoceros accepts following options(s). Note, the default value of several options is different from Starlet.

--max-workers=#

number of worker processes (default: 5)

--timeout=#

seconds until timeout (default: 300)

--keepalive-timeout=#

timeout for persistent connections (default: 10)

--max-reqs-per-child=#

max. number of requests to be handled before a worker process exits (default: 1000)

--min-reqs-per-child=#

if set, randomizes the number of requests handled by a single worker process between the value and that supplied by --max-reqs-per-chlid (default: none)

--max-keepalive-connection=#

max, number of connections to keep in the manager process. If you want to increase this value, You should check your system limitations. (default: half number of POSIX::_SC_OPEN_MAX)

--max-readahead-reqs=#

max. number of requests to continue to read a request in a worker process. Monoceros can read a next request after the response for maximum throughput. (default: 100)

--min-readahead-reqs=#

if set, randomizes the number of requests to continue to read a request between the value and that supplied by --max-readahead-reqs (default: none)

--disable-keepalive

disable HTTP keepalive feature (default: enabled)

RECOMMENDED MODULES

For more performance. I recommends you to install these module.

- EV

- HTTP::Parser::XS

EXPERIMENTAL FEATURES

  • accept4

    Linux only. If Linux::Socket::Accept4 is available, Monoceros use it. accept4(2) can do accept(2) and set SOCK_CLOEXEC|SOCK_NONBLOCK at once.

  • sendfile

    Monoceros send IO::Handle like body with sendfile(2). Sys::Sendfile is required.

SEE ALSO

Starlet, Server::Starter, AnyEvent, IO::FDPass

LICENSE

Copyright (C) Masahiro Nagano

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Masahiro Nagano kazeburo@gmail.com