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:
-
ClientConnectionManager
haServerSocket
oggetto che accetta costantemente clientSocket
connessioni. -
ClientConnectionManager
ha un pool di thread che genera un nuovo oggettoClientProxy
quando viene accettata una connessione socket client, consegnando l'oggettoSocket
del client. - Gli oggetti
ClientProxy
rappresentano l'app client e gestiscono l'invio / la ricezione di messaggi attraverso loSocket
stream.
È 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?