Thread Wie man am Besten einen Daemon schreibt (12 answers)
Opened by cala.vera at 2006-03-09 11:20

cala.vera
 2006-03-09 11:20
#37171 #37171
User since
2006-03-09
7 Artikel
BenutzerIn
[default_avatar]
Hallo,

zunächst will ich sagen, dass ich hier keine Syntax oder sonstigen semantischen Schnick-Schnack diskutieren will :)

Ich arbeite an einem Projekt, welches über Netzwerk kommuniziert.
Meine Frage bezieht sich eher auf die Art, wie man so etwas am Besten entwickelt.

Auf einer Machine läuft ein Daemon, dieser Daemon wartet ständig auf eine Anfrage aus dem Netzwerk. Kommt etwas, arbeitet der Daemon etwas ab und schickt etwas zurück. Was das im Detail ist, ist nicht so wichtig.

Folgendes:
Dieser Daemon existiert bereits hat aber ein Problem: Nach einer gewissen Zeit (ein paar Tage) wird er langsam. Nach etwas mehr Zeit reagiert er dann gar nicht mehr. (Der Prozess selbst läuft noch)

Er arbeitet auf folgende Weise:
1. startet iThread
Code: (dl )
1
2
my $thr = threads->create("receive");
$thr->detach();

dieser öffnet (in einer endlosschleife) eine socket und hört ständig auf sie .
Code: (dl )
1
2
3
while(<$new_sock>) {
$msg=$_;
}

Wenn etwas kommt, schreibt er etwas dementsprechendes in ein Array namens Buffer rein, schließt dann die socket und rennt erneut seine Schleife durch. Dieses Array wird von allen Threads geshared. (threads::shared).

2. Der eigentliche Prozess rödelt ebenfalls ständig eine Endlosschleife durch.
Code: (dl )
1
2
3
4
5
6
if(@BUFFER > 0){
# do something
open socket
sending something
close socket
}


Der Code ist gut lesbar dokumentiert und ich weiß ja auch, was der Daemon macht, allerdings habe ich große Probleme mit der Wartung, da ich einfach nicht weiß, warum er langsam wird und dann irgendwann stehen bleibt :/

Ich hoffe ihr könnt mir helfen. Ich habe zwar diverse Tutorials gefunden, wie man Daemons, Sockets, IThreads implementiert, aber nie etwas alles in einem :)

Warum iThreads ? Tjo ... (die sind eben neu und erst ab 5.8.0 verfügbar). Aber bevor ich jetzt versuche daran zu bohren, würde ich gern wissen, ob das Konzept generell so ist, wie man Net-Daemons schreiben sollte.

Ich wäre für Hilfe gern Dankbar und vielen Dank im Vorraus :)

MfG, Clemens

View full thread Wie man am Besten einen Daemon schreibt