私は、Perlとソケットプログラミングの両方で最小限の経験を持っていると言ってこれを前に説明します。私は複数のクライアント接続を同時に処理し、いつでもクライアントのいずれかからデータを受信し、受信した情報に基づいてクライアントにデータを返すことができるTCPサーバーを持っています。たとえば、Client1とClient2は自分のサーバーに接続します。 Client2が "Ready"を送信すると、サーバーはそれを解釈し、 "Go"をClient1に送信します。以下は、私がこれまでに書かれたものです:複数のクライアント接続を扱うPerl TCPサーバー
my $sock = new IO::Socket::INET
{
LocalHost => $host, // defined earlier in code
LocalPort => $port, // defined earlier in code
Proto => 'tcp',
Listen => SOMAXCONN,
Reuse => 1,
};
die "Could not create socket $!\n" unless $sock;
while (my ($new_sock,$c_addr) = $sock->accept()) {
my ($client_port, $c_ip) = sockaddr_in($c_addr);
my $client_ipnum = inet_ntoa($c_ip);
my $client_host = "";
my @threads;
print "got a connection from $client_host", "[$client_ipnum]\n";
my $command;
my $data;
while ($data = <$new_sock>) {
push @threads, async \&Execute, $data;
}
}
sub Execute {
my ($command) = @_;
// if($command) = "test"
// send "go" to socket1
print "Executing command: $command\n";
system($command);
}
私は私のループが阻止される一方の両方を知っていると私はスレッドとしてコマンドを受け入れる私の実装する方法を必要とするが、私は適切な方法はよく分かりませんそれを書いているのです。