Threads Kommunikation zwischen SocketThread und WorkerThread

Stroker89

Bekanntes Mitglied
Hallo,

gegeben sind mehrere SocketThreads (Multiuser), die jeweils einen WorkerThread starten. Kommuniziert wird über zwei LinkedBlockingQueues.

Ablauf: SocketThread bekommt Daten -> Daten werden weitergereicht an Worker über Queue -> Worker verarbeitet die Daten schickt das Ergebnis über den anderen Queue zum SocketThread zurück.

Jetzt kommt das Problem:
Da der read auf dem Socket immer blockierend ist, kann ich natürlich den Queue nur dann lesen, wenn der Client neue Daten schickt, was niemals passiert, wenn der Queue nicht gelesen werden kann und der Client keine Antwort bekommt. 🙁

Hoffe meine Erklärung ist soweit verständlich.

Wie kann ich dieses Problem umgehen? Gibt es sowas wie eine Best Practise für dieses Problem?

Gruß
 
Zuletzt bearbeitet:
Hoffe meine Erklärung ist soweit verständlich.
Ich hab's nicht verstanden. Mir sind die Zusammenhänge zwischen dem Lese-Thread vom InputStream des Sockets und dem WorkerThread nicht ganz klar. Wie hängt das Lesen von der Queue mit dem Lesen vom InputStream zusammen? Warum soll im Lese-Thread (der ja ausschließlich für Empfang und ggf. Weitergabe von Daten des InputStreams) auch noch von der Queue gelesen werden?
 
Der SocketThread Liest vom Socket und gibt die Daten an den WorkerThread und der verarbeitet diese Daten und gibt sie dann wieder an den SocketThread zurück , um auf den Socket geschrieben zu werden.

Warum schreibst du nicht die Daten direkt aus dem WorkerThread auf den Sockel?
 
Habe ich mir auch schon überlegt, aber das erschien mir als nicht ganz logisch. SocketThread ist für Socket zuständig und Worker für den Rest.

"Darf" man das denn so machen?

Gruß
 

Zurück
Oben