рдкрд░реНрд▓ рдореЗрдВ рдмрд╣реБрдкрд░рдд рд╕рд░реНрд╡рд░? рдЖрд░рд╛рдо рд╕реЗ!

рдХрднреА-рдХрднреА рдХреБрдЫ рд╕рд░рд▓ рдЯреАрд╕реАрдкреА рдпрд╛ рдпреВрдбреАрдкреА рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рдореЗрд░рд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдбреАрдПрдЪрд╕реАрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдореМрдЬреВрджрд╛ рд▓реЛрдЧ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ)ред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдмрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЪрдХреНрд░, рд╕реЙрдХреЗрдЯ рдХреЛ рд╕реБрдиреЛ - рдФрд░ рд╡реЛрдЗрд▓рд╛! рд▓реЗрдХрд┐рди "рдмреЗрд╡рдХреВрдл" рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрд╢рд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП), рдФрд░ рднрд╛рд░реА рддреЛрдкрдЦрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред

рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рддреИрдпрд╛рд░реА, рдпрд╛ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдкрд░реНрд▓ рдХреЛ рдЦреБрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд░реЗрдВрдЧреЗред рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ - рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдореИрдВрдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, CPAN рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдиреЗрдЯ :: рд╕рд░реНрд╡рд░ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ (рдбреЗрдмрд┐рдпрди / рдЙрдмрдВрдЯреВ рдореЗрдВ libnet-server-perl) рдпрд╛ рд╕реАрдзреЗ cpan (рдПрдХ рд╢реМрдХрд┐рдпрд╛ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
cpan Net::Server 

рд╕рд┐рджреНрдзрд╛рдВрдд


рдиреЗрдЯ :: рд╕рд░реНрд╡рд░ рдорд▓реНрдЯреА-рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдореЙрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рд╕рд┐рдВрдЧрд▓ (рдПрдХ рдзрд╛рдЧрд╛), рдлреЛрд░реНрдХ (рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдмрдЪреНрдЪрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛), рдкреНрд░реАрдлрд╝реЙрд░реНрдХ (рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рд╕реНрдорд╛рд░реНрдЯ), рдЖрдИрдИрдЯреАрдЯреА ( рдЖрдИрдЯреАрдбреА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП), рдорд▓реНрдЯреА рдЯрд╛рдЗрдк (рдореЙрдбрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдирд╛ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ) рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ PreFork рдкрд╕рдВрдж рд╣реИ (рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реНрдерд┐рд░, рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА), рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдорд▓реНрдЯреА рдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рдЕрдЧрд░ рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рддреЛ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбрд▓ рдкрд░ рдирд╣реАрдВ рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдкреИрдХреЗрдЬ рдЬреЛ рдХреБрдЫ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдореЙрдбреНрдпреВрд▓, рд╡рд░реНрдЧ, рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдЖрдзрд╛рд░ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдПрдХ!), рдЗрд╕реЗ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдПрдХ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╕рд┐рдиреЙрдкреНрд╕рд┐рд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг (рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдкрд░реНрд▓ рдЬрд╛рджреВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд░рд╛рд╕рдд рд╢реНрд░реЗрдгреА рдШреЛрд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рд░рд╛рд╕рдд), рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 #!/usr/bin/perl use Net::Server::PreFork; @ISA = qw(Net::Server::PreFork); sub process_request { #...code... } __PACKAGE__->run(); 

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмрд╕ред рджреГрдврд╝рддрд╛ рд╕реЗред рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗред рдФрд░ рдирд┐рдлрд╝рд┐рдЧрд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ (рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рдкреНрд▓рд╕ рднреА рд╣реИ - рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╕рдм рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдорд╛рдирд╡реАрдп рд░реВрдк рдореЗрдВ рд▓рд╛рдПрдВрдЧреЗред

рдЕрднреНрдпрд╛рд╕


рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдХрд╣реАрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдлрд╛рдЗрд▓реЗрдВ (рдкреИрдХреЗрдЬ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реНрд╡рдпрдВ) рд╣реЛрдВрдЧреАред рдЖрдЧреЗ рдХреА рд╣рд▓рдЪрд▓ рдХреЗ рдмрд┐рдирд╛, рдХреЛрдб:
lib / Net / Server / Hello.pm
 #!/usr/bin/perl package Net::Server::Hello; #    use strict; #     ;) use warnings; use base qw(Net::Server::PreFork); #  sub process_request { # ,        my $self = shift; #    .  Perl - while (<STDIN>) { # Net::Server     STDIN + STDOUT! print "Hello!\n"; # .      . } } 1; # Perl-:    return 

рдЖрджрд┐ / myserver.cfg
 #  -   port 9999 proto tcp 


рдмрд┐рди / myserver.pl
 #!/usr/bin/perl use strict; use warnings; use FindBin; use lib "$FindBin::Bin/../lib"; #  :     bin, #   () -  lib,  .. use Net::Server::Hello; #    ; , ,      our $server = Net::Server::Hello->new(conf_file => "$FindBin::Bin/../etc/myserver.cfg"); $server->run(); # ! 

рдпрджрд┐ рдЖрдк рдЕрдм рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЯреЗрд▓рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдкреВрдЫреЗрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:
$ telnet 127.0.0.1 9999
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
!
Hello!
Hi!
Hello!

Hello!
^]quit

telnet> quit
Connection closed.


рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?


рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ :: рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рд╕рд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд▓рд┐рдЦрдиреЗ рдпрд╛ рд╣рдм рдкрд░ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ RADIUS рд╕рд░реНрд╡рд░ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рд╡реАрдкреАрдПрди рд╕реЗрд╡рд╛ (рдХреЗрдмреНрд░рдо, рд╣реИрд▓реЛ!) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, CPAN рдкрд░ рдХрдИ рдЯрди рдХреЛрдб рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдиреЗрдЯ :: рд╕рд░реНрд╡рд░ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ HTTP рд╕рд░реНрд╡рд░ред рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝реЗрдВ - рдпрд╣ рд╕реНрдЯреАрдпрд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдмрд▓ рдЖрдкрдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реИред

рдЪрд┐рддреНрд░ xkcd рд╕реЗ
рдЕрдЧрд░ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╣реИрдмреНрд░рддреЛрдкрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╣рдмреНрд░рд╛рд╣рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕рд╣реА рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдбрд╝реЗ рд╣реБрдП рдЕрдВрдбреЗ рджреЗрдВред

Source: https://habr.com/ru/post/In120170/


All Articles