Ich habe ein Programm, daß asynchron von einem Socket lesen muss.
Ich schicke zunächst eine Nachricht und bekomme dann eine Antwort und anschließend eine beliebige Anzahl Nachrichten.
Meine Verarbeitung mit recv funktioniert auch, nur sorgt daß für eine sehr hohe Auslastung auf der Maschine.
Wie würde ich das Programmieren, damit ich mit einem Timeout lese und dann vielleicht nur alle 5-10 Sekunden prüfe, ob ich eine Nachricht bekommen habe.
Meine Receive Funktion sieht wie folgt aus:
sub receive {
#no arguments- receives a new message
my($message, $j, $i, $length);
$message ="";
my $self=$_[0];
my $remote=$self->{remote};
$remote->recv($length, 10);
while ($length){
$remote->recv(my $message_block, $length > 4096 ? 4096 : $length);
$message .= $message_block;
$length -= length $message_block;
}
return $message;
}
Vielen Dank!