Hallo!
Ich möchte gerade zum ersten Mal in einem Projekt Thread einsetzten und habe dabei noch ein Verständnisproblem. Bei meinem Projekt geht es um einen Server der Daten aus verschiedenen Quellen (z.B. Datenbanken) bereit hält, damit diese von beliebig vielen Clients abgefragt werden können.
Wie werden hier Threads am sinnvollsten eingesetzt um die "gleichzeitige" Abfrage aus mehreren Quellen zu ermöglichen?
Mein erster Denkansatz war folgender:
- Beim Start des Servers wird für jede Datenquelle ein entsprechendes Objekt erstellt. Für jedes Objekt wird hierbei ein eigener Thread erstellt. Nach der Initialisierung des Objektes läuft der Thread in einer Schleife weiter und wartet auf Abfragen des Objektes.
- Ein Client richtet eine Abfrage von Quelle1 an den Server. Diese wird vom Haupthread entgengenommen.
- Der Server leitet die Anfrage an den Thread von Quelle1 weiter. Dort werden die Daten für die Antwort zusammen gestellt.
- Der Server kann während dessen weiterarbeiten und z.B. andere Anfragen verarbeiten
- Der Thread von Quelle1 gibt die Antwort an den Server zurück der diese an den Client leitet.
Wäre das in der dieser Art machbar?
Kann ein Thread Anfragen/Daten/WasAuchImmer an einen anderen Thread weiterleiten? Ausgehend von dem was ich bis jetzt über das Thema gelesen habe denke ich nicht, dass das geht. Der Hauptthread kann also weder die Anfrage an den Thread von Quelle1 geben noch kann dieser mit Daten Antworten.
Sehe ich das richtig?
Zweiter Ansatz
- Beim Start des Servers wird für jede Datenquelle ein entsprechendes Objekt erstellt. Für jedes Objekt wird hierbei ein eigener Thread erstellt. Nach der Initialisierung des Objektes
ist der Thread beendet.
- Ein Client richtet eine Abfrage von Quelle1 an den Server. Diese wird vom Haupthread entgengenommen.
- Der Hauptthread erstellt einen neuen Thread in dem die Daten von von Quell1 abgefragt wird.
- Der Server kann während dessen weiterarbeiten und z.B. andere Anfragen verarbeiten
- Der Thread von Quell1 erstellt die Antwort und sendet diese an den Client.
Soweit ich das Thema Threads bis jetzt verstanden habe, sollte das Ganze mit diesem Ansatz funktionieren. Der Haupthread leitet keine Anfrage an einen existierenden Thread sondern erstellt für jede Anfrage einen neuen Thread. Der Thread von Quelle1 gibt die Antwort nicht an den Haupthread zurück sondern sendet die Daten selbst an den Client.
Würde das so funktionieren?
Wenn ja: Ist die Lösung wirklich sinnvoll und sauber? Gibt es ggf. noch bessere Ansätze?
Wenn nein: Wie löst man dieses Problem dann am Besten? Das Ganze lässt sich ja 1 zu 1 mit einem Webserver vergleichen. Es sollte also eigentlich in jedem Fall eine gute Lösung dafür geben
Herzlichen Dank für Eure Tipps und Meinungen hierzu!
Ares