DynGig::Util::TCPServer - A generic multithreaded TCP Server interface.
A server listens for and accepts incoming TCP connections on a port or a Unix domain socket. And a pool of threads are created to handle the connections in parallel. The server code handling the connections is to be implemented in the inheriting class.
A more sophisticated implementation may require serialization in processing requests, e.g. logging. There must be a dedicated worker thread that serially processes requests from the server threads.
Hence _server() is the interface method to be implemented, and _worker() is an optional interface method. If _worker() is inplemented, each _server() thread needs to communicate with it via a pair of queues for two-way communication. e.g.
sub _server { my ( $this, $socket, @queue ) = @_; ... } sub _worker { my ( $this, @queue ) = @_; ... }
Launches server.
## an echo server module package Echo; use base DynGig::Util::TCPServer; use strict; use constant MAX_BUF => 2 ** 5; sub _server { my ( $this, $socket ) = @_; my $buffer; syswrite( $socket, $buffer ) if sysread( $socket, $buffer, MAX_BUF ); } 1; __END__ ## echo server use strict; use Echo; my $server = Echo->new ( port => 12345, thread => 30, listen => 10, maxconn => 300, ); $server->run();
Socket, threads, Thread::Queue, and IO::Select,
See DynGig::Util
To install DynGig::Util, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DynGig::Util
CPAN shell
perl -MCPAN -e shell install DynGig::Util
For more information on module installation, please visit the detailed CPAN module installation guide.