Concetti Chiave
- La transizione verso la multiutenza richiede l'uso di ListenerSocketManager e HandlerSocketManager per gestire simultaneamente più richieste da vari client.
- Il server utilizza un socket "listener" per ricevere richieste e apre un socket "handler" per ogni nuova richiesta, gestendo così le comunicazioni in modo efficace.
- I costruttori delle classi ListenerSocketManager e HandlerSocketManager sono essenziali per l'inizializzazione e la gestione delle socket nel server.
- La gestione degli utenti richiede l'istanza di due classi separate, una per il listener e una per l'handler, per garantire un'elaborazione isolata delle richieste.
- HandlerSocketManager include metodi chiave come .riceviRichiesta(), .inviaRisposta(String msg) e .chiudi() per gestire le interazioni con i client.
Per muoverci verso la multiutenza, la classe SimpleServerSocketManager non basta più infatti si dovrà ricorrere ad altre due classi: ListenerSocketManager e HandlerSocketManager.
Come funziona il server?
Grazie a queste due nuove classe è possibile gestire più richieste da più client alla volta infatti ora si avrà la seguente situazione: il server apre subito un socket definito “listener” in ascolto delle richieste provenienti dai client; per ogni nuova richiesta che giunge al server, il server apre un nuovo socket definito “handler” e le richieste passano dal listener all’handler; attraverso l’handler, il server invia le risposte ai client.
Costruttori e metodi delle classi
I costruttori delle classi sopra sono:
ListenerSocketManager (java.lang.String port)
HandlerSocketManager (ListenerSocketManager socket)
Mentre il Listener ha solo il costruttore, l’HANDLER ha I seguenti metodi:
- .riceviRichiesta () = riceve la richiesta inviata al server;
- .inviaRisposta (java.lang.String msg) = invia una risposta al client connesso attraverso il socket;
- .chiudi () = chiude il socket;
Gestione complessa degli utenti
La gestione di più utenti è tuttavia un po’ più complessa infatti bisogna istanziare due diverse classi poiché è necessario avere una classe che si occupa solo del “listener” e una che si occupa solamente del “handler” poiché ogni volta che si riceve una richiesta al listener questo istanzia un’handler per gestire la richiesta.
Domande da interrogazione
- Qual è il ruolo delle classi ListenerSocketManager e HandlerSocketManager nel funzionamento del server?
- Quali sono i metodi principali della classe HandlerSocketManager?
- Perché è necessaria una gestione complessa degli utenti nel server?
Le classi ListenerSocketManager e HandlerSocketManager sono fondamentali per gestire più richieste da diversi client simultaneamente. Il ListenerSocketManager apre un socket in ascolto delle richieste, mentre l'HandlerSocketManager gestisce le risposte per ogni richiesta ricevuta, creando un nuovo socket per ogni interazione (come descritto nel testo).
La classe HandlerSocketManager dispone di tre metodi principali: .riceviRichiesta() per ricevere le richieste, .inviaRisposta(String msg) per inviare risposte ai client, e .chiudi() per chiudere il socket. Questi metodi sono essenziali per la gestione delle comunicazioni con i client (come indicato nel testo).
La gestione degli utenti è complessa perché richiede l'istanza di due classi separate: una per il listener e una per l'handler. Questo approccio consente di gestire in modo efficiente le richieste, poiché ogni richiesta ricevuta dal listener genera un nuovo handler per elaborarla, garantendo così un'adeguata separazione delle responsabilità (come spiegato nel testo).