Hallo Ihr,
ich habe eine ganz allgemeine Frage, die ich jetzt erstmal in der Theorie erläutern will. Sollte es unverständlich sein, schreibe ich dazu gerne noch ein Code-Beispiel.
Ausgangssituation: Ich habe ein Programm zur Server-Client-Kommunikation geschrieben.
Es verwendet eine Thread-sichere Blocking Queue und arbeitet auf mehreren Threads.
Bspw. auf der Serverseite gibt es einen Server-Thread, der auf Client-Verbindungen wartet.
Verbindet sich ein Client, erstellt er einen "Empfänger" und einen "Sender" Thread.
Diesen wird jeweils eine "sendeq" und eine "listenq" übergeben.
Möchte ich nun etwas verschicken, packt der Server einfach ein Objekt in die "sendeq", der Rest passiert dann von selbst über einen ObjectStream.
Problem: Nun habe ich aber nur einen Client implementiert und möchte das Ganze etwas ausweiten auf mehrere. Dazu habe ich mir überlegt, dass bei der Verbindung eines Clients einfach zwei weitere Threads erzeugt werden, genau wie oben. Also "Empfänger2" "Sender2" oder so.
Denen wird dann einfach wieder die BlockingQueue übergeben. Und hier komme ich zu meinen Fragen.
Fragen:
(1) Ist es möglich die gleiche (Thread-sichere) Variable mehreren Threads zu übergeben? Und wenn ja, wie spreche ich dann beispielsweise nur die "sendeq" des zweiten Threads an?
Ich stelle mir das so wie bei Klassen vor: Empfaenger2.sendeq.add(Nachricht)
(2) Ist es überhaupt möglich auf einem Socket mehrere Input- und Outputstreams zu erstellen?
(3) Gäbe es prinzipiell eine Möglichkeit die Threads dynamisch zu erstellen, so dass das Ganze beliebig erweiterbar ist oder muss die Anzahl der möglichen Clients vorher feststehen?
Ich denke momentan daran, dass bei jeder weiteren Verbindung einfach der nächste Thread gestartet wird und durch eine Runtime-Variable vorher feststeht wieviele es geben kann.
Die heißen dann halt "Empfaenger1" "Empfaenger2" usw...
Vielen Dank für hoffentlich viele Antworten =)
ich habe eine ganz allgemeine Frage, die ich jetzt erstmal in der Theorie erläutern will. Sollte es unverständlich sein, schreibe ich dazu gerne noch ein Code-Beispiel.
Ausgangssituation: Ich habe ein Programm zur Server-Client-Kommunikation geschrieben.
Es verwendet eine Thread-sichere Blocking Queue und arbeitet auf mehreren Threads.
Bspw. auf der Serverseite gibt es einen Server-Thread, der auf Client-Verbindungen wartet.
Verbindet sich ein Client, erstellt er einen "Empfänger" und einen "Sender" Thread.
Diesen wird jeweils eine "sendeq" und eine "listenq" übergeben.
Möchte ich nun etwas verschicken, packt der Server einfach ein Objekt in die "sendeq", der Rest passiert dann von selbst über einen ObjectStream.
Problem: Nun habe ich aber nur einen Client implementiert und möchte das Ganze etwas ausweiten auf mehrere. Dazu habe ich mir überlegt, dass bei der Verbindung eines Clients einfach zwei weitere Threads erzeugt werden, genau wie oben. Also "Empfänger2" "Sender2" oder so.
Denen wird dann einfach wieder die BlockingQueue übergeben. Und hier komme ich zu meinen Fragen.
Fragen:
(1) Ist es möglich die gleiche (Thread-sichere) Variable mehreren Threads zu übergeben? Und wenn ja, wie spreche ich dann beispielsweise nur die "sendeq" des zweiten Threads an?
Ich stelle mir das so wie bei Klassen vor: Empfaenger2.sendeq.add(Nachricht)
(2) Ist es überhaupt möglich auf einem Socket mehrere Input- und Outputstreams zu erstellen?
(3) Gäbe es prinzipiell eine Möglichkeit die Threads dynamisch zu erstellen, so dass das Ganze beliebig erweiterbar ist oder muss die Anzahl der möglichen Clients vorher feststehen?
Ich denke momentan daran, dass bei jeder weiteren Verbindung einfach der nächste Thread gestartet wird und durch eine Runtime-Variable vorher feststeht wieviele es geben kann.
Die heißen dann halt "Empfaenger1" "Empfaenger2" usw...
Vielen Dank für hoffentlich viele Antworten =)