Kommunikation zwischen Prozessen - Server/client



  • 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?



  • ???
    ist ein wenig durcheinander beschrieben.
    Aber da du recv() erwähnt hast. Gehe ich mal davon aus das mit Client/Server IP-Verbindungen gemeint sind. Also klassisch Peer To Peer. Innerhalb eines Clients bzw. Server Prozesse hast. Sind das wohl Threads zumindenstens unter Win heißen diese so.

    Dann würde ich mal sagen ist die Antwort ist Multi-Threading. Unterteilung in Haupt Thread und Abreits Threads und natürlich Thread-Synchronisierung. Schickes Thema.

    Hierzu gibts es libs wie ACE oder boost die dir eine menge Arbeit ersparen, wenn du die Chance hast diese zu benutzen.



  • ja, sorry, ist etas konfus beschrieben.

    Also ich arbeite mit Prozessen. Ein Server parent, Server child, time child und eben die Clients. Threads verwende ich nicht...von dem Main thread abgesehen 😉

    Ich werde es wohl mit einem Signal lösen. Time child kennzeichnet das Ende, Server parent sendet Signal an alle seine Server childs und diese wiederum an ihre Clients. Die Clients geben eine Bestätigung an ihre Server childs zurück und beide beenden sich. Zum Schluss beendet sich auch Server parent.

    Ich hoffe das kann man so machen. Mal sehen.


Anmelden zum Antworten