La classe SynchroThread

Come si è già evidenziato in precedenza, l'attività di sincronizzazione è un processo continuo, ed in particolar modo per un server, che deve mantenere il proprio orologio il più preciso possibile.

Questa classe è quella deputata a svolgere l'azione periodica di sincronizzazione dell'orologio, collegandosi ad un server primario scelto a caso dalla lista della classe NTPServers.

L'operazione principale del server è quella di fornire un servizio quando gli viene richiesto, in questo caso rispondere alle richieste dei client per sincronizzare i loro orologi. Tutto il resto, sono operazioni al contorno che, seppur necessarie, devono interferire il meno possibile con le operazioni di routine. Per questo, si è scelto di porre l'attività di sincronizzazone in un thread separato dal server, consentendo di continuare a servire i clienti e di sincornizzare l'orario in maniera indipendente.

Questa classe si comporta esattamente come un client: si collega ad un server, ottiene una risposta e da questa calcola i valori relativi al clock locale e li imposta sul server tramite un metodo messo a disposizione da quest'ultimo.

Per cautelarsi da eventuali problemi di sincronizzazione è stato anche utilizzato un algoritmo che pone il server fuori sincronia quando non si riesce a contattare un certo numero di server. Sembra una situazione rara, ma basti pensare ad un server NTP che si trova sul bordo di una LAN, magari proprio sul gateway, e che fornisce il proprio servizio alle workstation della LAN: se il collegamento verso l'esterno viene a mancare, non è possibile sincronizzare l'orologio del server, ma i client continueranno a fare richiesta per il suo servizio; porre il server fuori sincronia è una politica molto stringente, ma non si è voluto far continuare a lavorare il server in condizioni di impossibilità di aggiornamento.

2004-01-08