Ingegneria del software
Cosa faremo oggi
Comunicazione tramite Socket Multi-Thread Logging
Comunicazione tramite Socket Multi-Thread
Nelle precedenti lezioni è stato illustrato l’utilizzo dei socket in un contesto sequenziale.
L’approccio precedente aveva la limitazione che ogni
“server” poteva gestire un solo “client” per volta
Per ovviare a questo problema solitamente il server
accetta la connessione, apre un thread a cui passa il socket del client e poi si rimetti in ascolto
Esempio Socket Multi-Thread - Server
Il server effettua l’accept e ad ogni nuova connessione crea un nuovo thread per la gestione del client socket
…
while(true){
clientSocket = serverSocket.accept();
task = new SimpleServerTask(clientSocket);
thread = new Thread(task);
thread.start();
}
Esempio Socket Multi-Thread – Server \ 2
E se volessimo terminare l’applicazione Uscendo dal ciclo while(true)
Segnalando la terminazione a tutti i thread attivi in
modo che possa essere effettuata una chiusura dolce?
Quali sono le modifiche da apportare?
Logging
Il logging è fondamentale per identificare possibili
problemi soprattutto quando il software è già stato rilasciato poiché potete tracciare ogni singola
operazione per identificare la causa di un problema
Esistono diversi livelli di logging che permettono di produrre una traccia delle operazioni con diversa granularità.
Esempio - Logging
public static void main(String[] args) { //Inizializzo la classe logger
Handler fileHandler = new FileHandler("mylog.log");
Logger.getLogger("logging.LoggingExample").addHandler(fileHandler);
Logger.getLogger("logging.LoggingExample").setLevel(Level.INFO);
//Recupero il logger
Logger logger = Logger.getLogger("logging.LoggingExample");
logger.finest("Messaggio livello finest");
logger.finer("Messaggio livello finer");
logger.fine("Messaggio livello fine");
logger.severe("Messaggio livello severe");
logger.config("Messaggio livello config");
logger.info("Messaggio livello info");