面白い? 猫へようこそ。
準備、または必要なもの
もちろん、まず、Perl自体が必要です。 多かれ少なかれモダンなバージョンで十分でしょう。 すぐに予約します-Windowsでこれを行う方法、わかりません。コードをチェックしませんでしたが、動作するはずです。
判明したように、 CPANにはそのようなタスクのための既製のNet :: Serverモジュールが既にあります 。 パッケージマネージャー(Debian / Ubuntuのlibnet-server-perl)または直接cpan(アマチュア用)のツールを使用してダウンロードしてインストールします。
cpan Net::Server
理論
Net ::サーバーは、マルチスレッドを操作するための複数のモデルを提供します。 シングル (1スレッド)、 Fork (各接続の新しい子プロセス)、 PreFork (類似、よりスマート)、 INET (inetdで使用)、 MultiType (いずれかのモデルの選択-構成からまたは自動的に)など。 私は個人的にPreForkが好きです(非常にシンプルで安定していますが、効果的です)。 実際には、MultiTypeを使用することをお勧めします。必要なモデルが利用できない場合、別のモデルにフォールバックできます。
このパッケージが提供するもの(モジュール、クラス、必要に応じて)はすべてベースです。 あなたはそれを継承し、いくつかの関数を再定義し(大丈夫、大丈夫、少なくとも1つ!)、設定を与え、それを実行する必要があります。 実際、必要なのは基本クラスだけです。 少し追加するだけです。 概要で説明されている基本バージョン(ただし、Perlの魔法がないわけではありません。たとえば、継承クラスを宣言しない継承)は、次のようになります。
#!/usr/bin/perl use Net::Server::PreFork; @ISA = qw(Net::Server::PreFork); sub process_request { #...code... } __PACKAGE__->run();
動作します。 シンプル。 強く。 事実上。 そして、nifigaは明確ではありません(これは一般にプラスでもあります。誰かに見せることができます)。 実際には、これらすべてをより人間的な形にするでしょう。
練習する
プログラムの場合は、どこかでフォルダーを選択することをお勧めします。 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
etc / myserver.cfg
# - port 9999 proto tcp
bin / 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で接続して何かを尋ねると、次のようなメッセージが表示されます。
$ 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.
次は?
ネットの使用::サーバーは、単純なネットワーク化された「Hello world」の作成
xkcdからの画像。
どちらかといえば、これが私の最初のhabratopikなので、habrahpostで腐った卵を投げつけてください。