• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kommunikation zwischen Prozessen - Server/client

deetee

Newbie
Hallo,

und wieder hab ich eine Frage. Und zwar ist folgende Situation:

Es gibt 4 Prozesse.

Server Parent
Server Child
Time Child

und ein Client der it Server Parent verbindet und dann ein Server Child zugeteilt bekommt.

Der Time Child Prozess überprüft die aktuelle Zeit, ob ein bestimmter Zeitpunkt erreicht wurde. Ist dieser Zeitpunkt erreicht, dann soll folgendes passieren:

Die Clients sollen das zeitnah mitgeteilt bekommen, d.h. sie sollten ohne Anfrage von diesem Ereignis erfahren können. Aber jeder Client ist bereits in einer Art blockierendem Zustand, da in einer While Schleife auf Tastatur Eingabe gewartet wird, welche Aktion der Benutzer tätigen möchte. Also ein Menue auf der Konsole.
Wenn die Clients das Ende Zeichen erkannt haben, dann sollen sie eine Mitteilung an ihren Server Child senden. Das geht dann über die Socket Verbindung, kein Problem.

Der Server Child soll sich dann auch beenden, nachdem er das Ok vom Client hat.

Ich weiß nicht wie der Client das Zeit Ende mitbekommen soll.

Hinweise:

Ich habe auch einen shared Memory Bereich, wo jeder Server Child Zugriff hat. Im shared memory wird auch von Time Child das Zeit ende eingetragen.

Das Problem ist, dass Server Child ja aber bereits mit recv() auf Anfragen von seinem Client wartet/blockiert und der Client ja auch auf Eingaben vom Benutzer wartet per scanf(), also auch blockiert.

Nimmt man da evtl. eine weitere Socket Verbindung im Server Child und client? Also extra eine für die Zeit Ende Mitteilung? Oder wie macht man sowas?
 

nbkr

Guru
Du kannst natürlich über noch einen Socket arbeiten. Geschickter ist es aber die zwei verschiedenen Aktionen des Clients bzw. des Servers in zwei Threads zu starten. Beim Client wartet dann ein Thread auf eingaben des Benutzers, ein anderer wartet auf das Zeitsignal des Servers.
 
OP
D

deetee

Newbie
Du hast recht, mit threads wäre das eleganter und besser.

Das Problem ist, dass ich es jetz tschon mit Prozessen gemacht habe und das nicht mehr ändern kann (Zeit).

Ich werde es jetzt mit einem Signal machen, welches vom Server Parent bei Zeitende an seine Server Childs geschickt wird und die wiederum das Signal an ihre Clients senden.

Ich hoffe das klappt auch so.
 
Oben