Sto codificando una coppia di applicazioni client / server in Java, mentre imparo a riguardo. Ho le funzionalità di base di inviare un messaggio al server e analizzarlo ma nel pensare al quadro generale della loro comunicazione, sono perplesso su dove andare da qui.
Sia il client che il server devono essere in grado di avviare uno scambio di dati, quindi ho bisogno di avere una lettura del thread su ciascun lato, in ogni momento. Inoltre, quando si avvia uno scambio, è necessario ascoltare la risposta. Se lo faccio, però, avrei due thread che leggono i dati, che suppongo non finiscano bene dato che, da quanto ho capito, non sarei in grado di assicurarmi che i dati vengano letti nel thread che voglio.
Vedo alcune opzioni, ma non sono sicuro di andare troppo lontano con ciascuna soluzione poiché la mia conoscenza non mi lascia pensare troppo avanti.
-
Utilizzare solo il primo thread che in origine era in attesa di dati prima dello scambio, per leggere anche la risposta per la query appena inviata da un thread diverso e inoltrare i dati a cui appartiene.
Sembra difficile. Se leggo i dati nello stesso thread che lo richiedeva, sarebbe molto semplice rispetto a questo.
-
Inizia a leggere InputStream nello stesso thread che ha richiesto i dati e crea il thread che era originariamente in ascolto, attendi.
Il mio problema con questo è che, se ci sono altri dati che arrivano dallo stesso client che non è correlato con la query appena creata, verrebbero recuperati da questo thread invece dell'altro, il che blocca lo scopo della lettura i dati qui.
-
Stabilire un'altra connessione dal client, a un'altra porta, dopo che il primo è stato stabilito. Quindi potrei usare una presa per gli scambi avviati dall'altra parte, e l'altra per ascoltare le risposte delle query fatte nel frattempo.
In questo modo saprei esattamente cosa sta succedendo, ma non avrei più questo stesso problema se avessi due query in attesa di dati contemporaneamente?
Sembra una funzionalità semplice, banale da trovare in molte applicazioni, quindi immagino ci sia un metodo provato e vero là fuori e non c'è motivo per me di provare a reinventare la ruota qui.
Quindi, per riassumere, qual è il modo consigliato di configurare applicazioni client / server in grado di gestire finestre di dialogo eventualmente sovrapposte, avviate da una delle due, in momenti imprevedibili?
Ho iniziato a modificare alcune parti della domanda per renderla un po 'più chiara, ma alla fine ho quasi riscritto completamente. Se è ancora un po 'di confusione è perché sono confuso. Penso che mi manchi un punto semplice ma non sono stato in grado di trovare esempi che mostrino questo.