Ciao a tutti.
Ho già fatto una prima mini-applicazione che sfrutta RMI e le basi le ho capite, solo che ho alcuni grossi dubbi.
Devo realizzare necessariamente con RMI (non posso purtroppo usare socket o altro) una funzionalità di questo tipo.
C'è un server e N client.
c'è l'interfaccia Server che offre la seguente funzionalità:
login(String username)
Ok. Ora ipotizziamo che il client richiama sul server: login("pippo").
Benissimo, il server aggiunge a una lista dinamica l'utente "pippo" che si è loggato.
Ora, ho la necessità che i client debbano avere sempre aggiornata la lista di chi è loggato.
La soluzione più banale è che il server offra la seguente funzionalità:
Lista richiedilistautenti()
In pratica facendo questa chiamata, il server ritorna al client la lista di utenti online (serializzata).
Il fatto è che dovrei mettere un loop sul client che continua a fare richieste al server, quindi per molti utenti contemporanei.. una marea di traffico, e in pratica scarto la soluzione.
Io vorrei creare sul client una interfaccia che possa offrire:
notificaArrivoUtente(String nomeutente)
In pratica quindi al login di qualcuno devo richiamare questo metodo remoto a tutte le persone che sono loggate in quel momento.
In pratica sia client che server dovrebbero agire da "server rmi".
Due domande:
1) sul server per attivare le funzionalità RMI, lancio rmiregistry, ma ovviamente la cosa farebbe davvero schifo se i client dovessero fare altrettanto per poter consentire al server di richiamare il metodo remoto "notificaArrivoUtente(...)" quindi si può evitare in qualche modo di fare eseguire ai client "rmiregistry"???
2) come caspita faccio a risalire agli utenti che sono loggati per richiamare su di loro il metodo di notifica??? Cioè.. se usassi TCP basta tenere attivo uno stream TCP per ogni cliente.. ma con RMI come faccio a risalire a chi si era loggato in precedenza??
Grazie a tutti per l'attenzione
Buon agosto!