Я предвосхищу это, говоря, что у меня минимальный опыт программирования на Perl и Socket, поэтому я ценю любую помощь, которую могу получить.У меня есть TCP-сервер, который должен обрабатывать несколько клиентских подключений одновременно и иметь возможность получать данные от любого из клиентов в любое время, а также иметь возможность отправлять данные обратно клиентам, основываясь на полученной информации.Например, Клиент1 и Клиент2 подключаются к моему Серверу.Client2 отправляет «Ready», сервер интерпретирует это и отправляет «Go» на Client1.Ниже я написал следующее:
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);
}
Я знаю, что оба моих цикла while будут блокироваться, и мне нужен способ реализовать мою команду accept в виде потока, но я не уверен, чтоправильный способ написать это.