NAME
Perinci::Access::Simple::Server::Socket - Implement Riap::Simple server over sockets
VERSION
version 0.14
SYNOPSIS
#!/usr/bin/perl
use Perinci::Access::Simple::Server::Socket;
my $server = Perinci::Access::Simple::Server::Socket->new(
ports => ['127.0.0.1:5678'], # default none
unix_sockets => ['/var/run/riap-simple.sock'], # default none
#start_servers => 0, # default 3, 0=don't prefork
#max_clients => 0, # default 3, 0=don't prefork
#max_requests_per_child => 100, # default 1000
#daemonize => 1, # default 0
);
$server->run;
Or use using the included peri-sockserve script:
% peri-sockserve -p 127.0.0.1:5678 -s /path/to/unix/sock Foo::Bar Baz::*
DESCRIPTION
This module implements Riap::Simple server over sockets. It features preforking, multiple interface and Unix sockets.
This module uses Log::Any for logging.
This module uses Moo for object system.
ATTRIBUTES
name => STR (default is basename of $0)
Name of server, for display in process table ('ps ax').
daemonize => BOOL (default 0)
Whether to daemonize (go into background).
ports => ARRAY OF STR (default [])
One or more TCP ports to listen to. Default is none. Each port can be in the form of N, ":N", "0.0.0.0:N" (all means the same thing, to bind to all interfaces) or "1.2.3.4:N" (to bind to a specific network interface).
A string is also accepted, it will be split (delimiter ,) beforehand.
Since server does not support any encryption, it is recommended to bind to localhost (127.0.0.1).
unix_sockets => ARRAY OF STR (default [])
Location of Unix sockets. Default is none, which means not listening to Unix socket. Each element should be an absolute path.
A string is also accepted, it will be split (delimiter ,) beforehand.
You must at least specify one port or one Unix socket, or server will refuse to run.
timeout => BOOL (default 120)
Socket timeout. Will be passed to IO::Socket.
require_root => BOOL (default 0)
Whether to require running as root.
Passed to SHARYANTO::Proc::Daemon::Prefork's constructor.
pid_path => STR (default /var/run/<name>.pid or ~/<name>.pid)
Location of PID file.
scoreboard_path => STR (default /var/run/<name>.scoreboard or ~/<name>.scoreboard)
Location of scoreboard file (used for communication between parent and child processes). If you disable this (by setting scoreboard_path => 0), autoadjusting number of children won't work (number of children will be kept at 'start_servers').
error_log_path => STR (default /var/log/<name>-error.log or ~/<name>-error.log)
Location of error log. Default is /var/log/<name>-error.log. It will be opened in append mode.
access_log_path => STR (default /var/log/<name>-access.log or ~/<name>-access.log)
Location of access log. It will be opened in append mode.
start_servers => INT (default 3)
Number of children to fork at the start of run. If you set this to 0, the server becomes a nonforking one.
Tip: You can set start_servers to 0 and 'daemonize' to false for debugging.
max_clients => INT (default 150)
Maximum number of children processes to maintain. If server is busy, number of children will be increased from the original 'start_servers' up until this value.
max_requests_per_child => INT (default 1000)
Number of requests each child will serve until it exists.
METHODS
$server = Perinci::Access::Simple::Server::Socket->new(%args)
Create a new instance of server. %args can be used to set attributes.
$server->run()
Run server.
$server->start()
Alias for run().
$server->stop()
Stop running server.
$server->restart()
Restart server.
$server->is_running() => BOOL
Check whether server is running.
$server->before_prefork()
This is a hook provided for subclasses to do something before the daemon is preforking. For example, you can preload Perl modules here so that each child doesn't have to load modules separately (= inefficient).
$server->access_log($sock)
Write access log entry.
SEE ALSO
peri-sockserve, simple command-line interface for this module.
Perinci::Access::Simple::Client, Perinci::Access
AUTHOR
Steven Haryanto <stevenharyanto@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Steven Haryanto.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.