Funzionamento del server

Il server fa uso delle due classi precedenti per gestire le richieste dei client e per mantenere il proprio clock aggiornato: è importante spendere alcune parole per descrivere come avviene questa attività.

Poichè non abbiamo voluto modificare l'orologio del calcolatore su cui veniva eseguito il server, si è pensato ad un modo alternativo per mantenere l'orologio aggiornato: dal momento che dall'attività di sincronizzazione si ottiene l'offset del clock locale rispetto al nodo corrente di sincronizzazione, quello che si è fatto è stato registrare questo valore e sommarlo ogni qual volta si avesse bisogno di prendere l'ora. Così facendo, avendo l'accortezza di importare il valore iniziale a 0, alla prima sincronizzazione si ottiene la correzione iniziale dell'orologio che lo porta vicino a quello della fonte di sincronizzazione. Dal secondo collegamento in poi, quello che otterremo sono delle correzioni rispetto a questo valore iniziale che ci portano alla modifica continua del valore dell'offset sul server, in modo da ottenere un valore sempre più preciso.

Il server dispone inoltre di due metodi importanti per l'aggiornamento del suo stato: il primo, setUpdate, consente di impostare i valori appena ottenuti dal SynchroThread, l'altro, outOfSync viene invocato da SynchroThread quando non è in grado di sincronizzarsi con nessun nodo e pone il server in uno stato in cui, sebbene ancora risponda ai client, indichi ad essi il suo stato di mancata sincronia, in particolar modo impostando Stratum a 0 e LI a 3.

2004-01-08