Perl TCP Server handling multiple-Client-verbindungen

Ich werde Vorwort dies mit den Worten ich habe nur minimale Erfahrung mit Perl-und Socket-Programmierung, so dass ich für jede Hilfe dankbar die ich bekommen kann. Ich habe einen TCP-Server benötigt, um mehrere Client-verbindungen gleichzeitig und in der Lage sein zum empfangen von Daten von beliebigen Clients zu jeder Zeit und auch in der Lage sein, Daten zu senden zurück zu den Clients, basierend auf Informationen, die er erhalten hat. Zum Beispiel, Client1 und Client2 eine Verbindung zu meinem Server. Client2 sendet "Ready", der server interpretiert diese und sendet "Gehen" auf Client1. Das folgende ist, was ich bisher geschrieben haben:

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);
}

Ich weiß, meine beiden while-Schleifen wird blockiert und ich brauche eine Möglichkeit zu implementieren, die meinem Befehl accept als einen thread, aber ich bin mir nicht sicher, ob das der richtige Weg, es zu schreiben.

InformationsquelleAutor Matt | 2011-01-31
Schreibe einen Kommentar