Seite 1 von 1

Inter Prozess Communication

Verfasst: 12. Juli 2012 15:23
von notReal
Hallo,

ich beschreibe einfach mal was ich machen möchte:

Programm A wird am Anfang gestartet. Es nimmt Tcp-Verbindungen (von einem Client C) an, überprüft #Nickname und #Passwort und startet mit Hilfe von QProcess ein weiteres Programm B.
B soll nun darauf warten dass C eine Tcp-Verbindung zu ihm aufbaut. Allerdings muss sichergestellt sein dass es C (oder zumindest derselbe Nutzer) ist. Dies möchte ich mit Hilfe der IP sicherstellen (kein weiterer Login).

A ist im Endeffekt einfach zum Login da. Damit nicht alles abstürzt falls irgendwo ein Fehler auftritt soll die eigentliche Berechnung in einem anderem Programm (B) stattfinden.

A und B müssen miteinander kommunizieren (gleicher User, Verbindungsabbruch, ...). Kann ich dafür QSharedMemory verwenden?

Ansonsten wäre ich auch über weitere Tipps froh.

Re: Inter Prozess Communication

Verfasst: 12. Juli 2012 16:41
von brax
Ob das mit den Prozessen wirklich ein günstiger Ansatz ist, sei mal dahingestellt. Ich würde es eher als Multithreaded Server (ein Thread pro Client) implementieren, aber ich kann Deine Argumentation nachvollziehen, dass ein Absturz von B in Deinem Modell wenigstens nicht gleich den ganzen Server runterzieht...

Jedenfalls würde ich Dir raten, dass die beiden Prozesse direkt über die ProcessChannels kommunizieren. QProcess ist ein QIODevice und A kann mit B Nachrichten austauschen (über stdout/stderr). Guck Dir mal den Abschnitt "Communicating via Channels" in der Doku zu QProcess an.

Außerdem wäre mein Vorschlag eher, dass A als Antwort auf den Login ein "Einmaltoken" (z.B. eine QUUID) an C zurückgibt, und dieses auch an B weitergibt. C schickt es dann nach dem Verbindungsaufbau an B und so weiß B, dass es sich um den autorisierten C handelt. Sonst bekommst Du auf jeden Fall Probleme, wenn mehrere Clients mit derselben IP ankommen (im LAN wohl eher unwahrscheinlich, aber beim Internet oder bei der Benutzung von Proxies etc. nicht unmöglich). 100%ig sicher gegen Angriffe von außen ist das natürlich auch nicht, außer Du sicherst die TCP Verbindung ab (QSslSocket).