Frage zu Perl IPC

Frage zu Perl IPC

am 23.02.2006 13:28:49 von Christian Meckel

Hallo Leute,

ich habe mal eine frage zu IPC unter Perl. Also wenn man vom Parent
Prozess an den Child Prozess Daten senden will (und / oder umgekehrt)
benötigt man ja 2 Pipes in etwas dieser form :

pipe EKL, EKS; #(E)ltern->(K)ind (L)esen und (S)chreiben
pipe KEL, KES; #(K)ind->(E)ltern (L)esen und (S)chreiben

soweit so gut. Jetzt meine Frage. Wie macht man das am geschicktesten
wenn man eine Anzahl von N child Prozessen hat? Man kann ja schlecht für
eine unbekannte Anzahl von childrens die Pipes anlegen.

z.B. wenn man einen server Programmiert der für jeden client der sich
connected einen child Prozess startet. Angenommen es sind 5 clienten
verbunden und daher 5 child Prozesse vorhanden, wie kann kann ich vom
Parent eine Message an alle child Prozesse senden?

Oder angenommen child (1) schickt eine Nachricht an Parent und ich
möchte das die Nachricht an alle anderen childrens weitergeschickt wird,
so wie es z.B. bei einem chat server ablaufen würde.

Vielen Dank im Voraus.


Grüße Christian Meckel

Re: Frage zu Perl IPC

am 23.02.2006 14:31:41 von Christian Lackas

* Christian [2006-02-23]:

Hallo Christian,

> ich habe mal eine frage zu IPC unter Perl. Also wenn man vom Parent
> Prozess an den Child Prozess Daten senden will (und / oder umgekehrt)
> benötigt man ja 2 Pipes in etwas dieser form :
>
> pipe EKL, EKS; #(E)ltern->(K)ind (L)esen und (S)chreiben
> pipe KEL, KES; #(K)ind->(E)ltern (L)esen und (S)chreiben
>
> soweit so gut. Jetzt meine Frage. Wie macht man das am geschicktesten
> wenn man eine Anzahl von N child Prozessen hat? Man kann ja schlecht für
> eine unbekannte Anzahl von childrens die Pipes anlegen.

Warum nicht? Die Pipes legt man doch einfach bei Bedarf an. Wenn man sie
nicht mehr braucht wird sie wieder zugemacht.

> z.B. wenn man einen server Programmiert der für jeden client der sich
> connected einen child Prozess startet. Angenommen es sind 5 clienten
> verbunden und daher 5 child Prozesse vorhanden, wie kann kann ich vom
> Parent eine Message an alle child Prozesse senden?

Was für eine Message? Reicht hier vielleicht schon ein Signal?
Aber es genau spricht dagegen sich an die Anleitung in

perldoc perlipc
Bidirectional Communication with Yourself

zu halten? Das ist der klassische Unix-Weg: Einfach vor dem fork zwei
pipe-Paare aufmachen, oder noch besser direkt mit socketpair(2) zu
arbeiten.

> Oder angenommen child (1) schickt eine Nachricht an Parent und ich
> möchte das die Nachricht an alle anderen childrens weitergeschickt wird,
> so wie es z.B. bei einem chat server ablaufen würde.

Gibt es auf dieser Welt nicht schon genug Chat-Server?
In dem Fall würde ich nicht mit Childs arbeiten, das kostet viel zu
viele Resourcen? Schau dir lieber mal select an. Damit kann ein
einzelner Prozess für eine Liste von z.B. Sockets prüfen wo es was zu
lesen gibt und die Daten dann an alle anderen Sockets weiterreichen.

Ein Einführungsbuch in Unix-Programmierung wäre wohl für dich der beste
Ansatzpunkt. Wenn du erstmal die Möglichkeiten deines Systems kennst,
dann ist das von dir beschriebene Problem leicht gelöst.

Gruß
Christian

--
Man soll keine Dummheit zweimal begehen, die Auswahl ist
schließlich groß genug.
(Jean-Paul Sartre, frz. Philosoph, 1905-1980)
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: Frage zu Perl IPC

am 24.02.2006 14:51:13 von Christian Meckel

> Gibt es auf dieser Welt nicht schon genug Chat-Server?
> In dem Fall würde ich nicht mit Childs arbeiten, das kostet viel zu
> viele Resourcen? Schau dir lieber mal select an. Damit kann ein
> einzelner Prozess für eine Liste von z.B. Sockets prüfen wo es was zu
> lesen gibt und die Daten dann an alle anderen Sockets weiterreichen.

Ich schreibe gerade einen Irc Bot in Perl und suche noch die beste
moeglichkeit wie ich das mit der Party Line manage. Aber ich denke ich
werde mich einfach mal in io::select einarbeiten.

P.S.: chat server gibs wirklich schon zur genuege da gebe ich dir recht ;-)

Re: Frage zu Perl IPC

am 24.02.2006 22:12:44 von Lukas Mai

Christian schrob:
>
>> Gibt es auf dieser Welt nicht schon genug Chat-Server?
>> In dem Fall würde ich nicht mit Childs arbeiten, das kostet viel zu
>> viele Resourcen? Schau dir lieber mal select an. Damit kann ein
>> einzelner Prozess für eine Liste von z.B. Sockets prüfen wo es was zu
>> lesen gibt und die Daten dann an alle anderen Sockets weiterreichen.
>
> Ich schreibe gerade einen Irc Bot in Perl und suche noch die beste
> moeglichkeit wie ich das mit der Party Line manage. Aber ich denke ich
> werde mich einfach mal in io::select einarbeiten.

Da bietet sich eigentlich POE in Verbindung mit POE::Component::IRC an,
oder?

Lukas

Re: Frage zu Perl IPC

am 25.02.2006 13:30:32 von Christian Meckel

> Da bietet sich eigentlich POE in Verbindung mit POE::Component::IRC an,
> oder?
>
> Lukas

ich wollte alles auf protokoll ebene selber schreiben ohne module usw.

Re: Frage zu Perl IPC

am 25.02.2006 13:49:35 von Thomas Wittek

> ich wollte alles auf protokoll ebene selber schreiben ohne module usw.

Langeweile? :)

-Thomas

Re: Frage zu Perl IPC

am 25.02.2006 14:13:17 von Christian Lackas

* Christian [2006-02-25]:

Hallo Christian ohne Nachnamen?

> > Da bietet sich eigentlich POE in Verbindung mit POE::Component::IRC an,
> > oder?
> ich wollte alles auf protokoll ebene selber schreiben ohne module usw.

warum dann Perl? Nimm doch besser gleich C, oder eine Maschinensprache?

Gruß
Christian

--
Murphys Law 2: Jedes Programm, das gut beginnt, endet schlecht. Alles,
was schlecht beginnt, endet furchtbar. Folgerung: Was einfach aussieht,
ist schwierig. Was schwierig aussieht, ist unmöglich.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker