Sto progettando un server di messaggistica istantanea come esercizio personale per migliorare la mia comprensione e l'applicazione di modelli di multi-threading e di progettazione in Java. Sto ancora progettando, non c'è ancora il codice.
Il mio obiettivo è avere un server che dovrebbe fare un uso efficace di una scatola multi-CPU. Mi piacerebbe che il server fosse distribuibile su più caselle, ma mi chiedo se è in esecuzione prima che io possa camminare.
I miei pensieri iniziali sono:
-
ClientConnectionManagerhaServerSocketoggetto che accetta costantemente clientSocketconnessioni. -
ClientConnectionManagerha un pool di thread che genera un nuovo oggettoClientProxyquando viene accettata una connessione socket client, consegnando l'oggettoSocketdel client. - Gli oggetti
ClientProxyrappresentano l'app client e gestiscono l'invio / la ricezione di messaggi attraverso loSocketstream.
È corretto che solo un ServerSocket possa legarsi a una Porta? Suppongo che non ci sia modo di avere un pool di oggetti che accettano connessioni Socket?
Ho due idee per il passaggio di messaggi tra ClientProxy oggetti. O direttamente tra ClientProxy oggetti che sono "amici" o tramite un oggetto centrale "Exchange", o meglio ancora, pool di oggetti.
Quali sono i pro / contro dei due approcci? Exchange si presta meglio a un'app distribuita?
I modelli Observer e Mediator, rispettivamente, sarebbero appropriati?