Spezielles Client/Server-Szenario: Fragen zur Vorgehensweise
Verfasst: 22. Januar 2010 22:18
Hallo,
ich muss zum ersten Mal eine Client-/Serveranwendung programmieren und habe ein paar ganz grundsätzliche Fragen, die ich mit Hilfe des Forums, der Doku und dem Fortune-Beispielen beantworten konnte. Ich bitte mein Unwissen im Netzwerkbereich zu entschuldigen.
Ich wäre euch über Ratschläge sehr dankbar!
Szenario:
Bis zu 50 Clients in einem lokalen Netzwerk verbinden sich mit der Serveranwendung. Benutzer arbeiten dann an den Clients. Jeder Client ist an sich so auch schon recht ausgelastet. Während der Arbeit soll jeder Client nun in regelmäßigen Abständen (z.B. alle 5 Sekunden) einen Status an den Server übermitteln. Gleichzeitig soll der Client auch auf Nachrichten vom Server reagieren können.
Die Serveranwendung listet alle verbundenen Clients und deren Status in einer GUI auf. Der Status wird regelmäßig aktualisiert, wenn die Clients einen neuen Status übermitteln. Zusätzlich soll der Benutzer der Serveranwendung Textnachrichten an alle oder individuelle Clients versenden können.
Wenn ich mir das Fortune-Server-Beispiel ansehe, sendet der Server nur "Antworten" an die Clients. Also immer nur, nachdem eine Nachricht vom Client eingegangen ist. Das ist für einen Teil meiner Anforderungen genau richtig (Status aktualisieren), beim anderen Teil (zusätzlich Textnachrichten an Clients) blicke ich aber noch nicht ganz durch.
Somit ergeben sich für mich folgende Fragen:
Allgemein:
1. TCP- oder UDP-Protokoll verwenden?
2. Ist der Server ein "echter" Server, wenn er auch auf eigenen Wunsch Nachrichten an Clients versendet? Oder sind die Clients dann auch "Server"?
3. Die Verbindungen nach Aufbau halten oder für jede Nachricht eine neue Verbindung und danach wieder beenden?
Server:
4. Einen Thread für jede neue Verbindung erzeugen oder den Server ohne Threads realisieren? (bis 50 Clients, gehaltene oder jedes Mal neue Verbindung - siehe Frage 2, GUI)
5. Um auf Benutzerwunsch (z.B. über Button) eine Nachricht vom Server an einen/mehrere Clients zu senden: QTcpServer auch bei Clients notwendig? Oder muss ich zwei TcpSockets erzeugen (senden/empfangen)? Oder unterbreche ich die Warte-auf-Daten-vom-Client-Schleife einer gehaltenen Verbindung, um zwischendrin über den Socket eine Nachricht zu versenden?
Client:
6. Sollte für die Clientfunktionalität ebenfalls ein Thread erzeugt werden? Ich denke bei einer vom Server gehaltenen Verbindung, bei der auch Nachrichten empfangen werden müssen macht ein Thread Sinn oder? Zudem muss ja regelmäßig der Status versendet werden und die GUI ist währenddessen auch schon anderweitig sehr beschäftigt.
VIELEN DANK FÜR EURE TIPPS!
ich muss zum ersten Mal eine Client-/Serveranwendung programmieren und habe ein paar ganz grundsätzliche Fragen, die ich mit Hilfe des Forums, der Doku und dem Fortune-Beispielen beantworten konnte. Ich bitte mein Unwissen im Netzwerkbereich zu entschuldigen.
Ich wäre euch über Ratschläge sehr dankbar!
Szenario:
Bis zu 50 Clients in einem lokalen Netzwerk verbinden sich mit der Serveranwendung. Benutzer arbeiten dann an den Clients. Jeder Client ist an sich so auch schon recht ausgelastet. Während der Arbeit soll jeder Client nun in regelmäßigen Abständen (z.B. alle 5 Sekunden) einen Status an den Server übermitteln. Gleichzeitig soll der Client auch auf Nachrichten vom Server reagieren können.
Die Serveranwendung listet alle verbundenen Clients und deren Status in einer GUI auf. Der Status wird regelmäßig aktualisiert, wenn die Clients einen neuen Status übermitteln. Zusätzlich soll der Benutzer der Serveranwendung Textnachrichten an alle oder individuelle Clients versenden können.
Wenn ich mir das Fortune-Server-Beispiel ansehe, sendet der Server nur "Antworten" an die Clients. Also immer nur, nachdem eine Nachricht vom Client eingegangen ist. Das ist für einen Teil meiner Anforderungen genau richtig (Status aktualisieren), beim anderen Teil (zusätzlich Textnachrichten an Clients) blicke ich aber noch nicht ganz durch.
Somit ergeben sich für mich folgende Fragen:
Allgemein:
1. TCP- oder UDP-Protokoll verwenden?
2. Ist der Server ein "echter" Server, wenn er auch auf eigenen Wunsch Nachrichten an Clients versendet? Oder sind die Clients dann auch "Server"?
3. Die Verbindungen nach Aufbau halten oder für jede Nachricht eine neue Verbindung und danach wieder beenden?
Server:
4. Einen Thread für jede neue Verbindung erzeugen oder den Server ohne Threads realisieren? (bis 50 Clients, gehaltene oder jedes Mal neue Verbindung - siehe Frage 2, GUI)
5. Um auf Benutzerwunsch (z.B. über Button) eine Nachricht vom Server an einen/mehrere Clients zu senden: QTcpServer auch bei Clients notwendig? Oder muss ich zwei TcpSockets erzeugen (senden/empfangen)? Oder unterbreche ich die Warte-auf-Daten-vom-Client-Schleife einer gehaltenen Verbindung, um zwischendrin über den Socket eine Nachricht zu versenden?
Client:
6. Sollte für die Clientfunktionalität ebenfalls ein Thread erzeugt werden? Ich denke bei einer vom Server gehaltenen Verbindung, bei der auch Nachrichten empfangen werden müssen macht ein Thread Sinn oder? Zudem muss ja regelmäßig der Status versendet werden und die GUI ist währenddessen auch schon anderweitig sehr beschäftigt.
VIELEN DANK FÜR EURE TIPPS!