CustomPeerResolverService: registrazioni client
Ogni nodo della rete pubblica le informazioni sull'endpoint relative nel servizio resolver tramite la funzione Register
. Il servizio resolver archivia queste informazioni come record di registrazione. Questo record contiene un identificatore univoco (RegistrationID) e informazioni sull'endpoint (PeerNodeAddress) per il nodo.
Record non aggiornati e data di scadenza
Idealmente, quando un nodo abbandona la rete, chiama la funzione Unregister
affinché il servizio resolver rimuova la voce di registrazione. Talvolta, i nodi vengono arrestati o diventano inaccessibili prima della chiamata alla funzione Unregister
, lasciando un record di registrazione non aggiornato.
I record non aggiornati nel servizio resolver possono causare problemi di connessione. Se un nodo che tenta di connettersi a una rete riceve informazioni di connessione non aggiornate dal servizio resolver, potrebbe richiedere più tempo per connettersi alla rete in modo corretto. I record non aggiornati occupano memoria. Senza un processo di pulizia efficiente, la cache utilizzata per archiviare le registrazioni potrebbe alla fine causare un overflow o un arresto anomalo del servizio resolver.
CustomPeerResolverService contrassegna ogni record con una data di scadenza (Datetime) e archivia tali informazioni come parte del record. Il servizio utilizza la data di scadenza per identificare i record non aggiornati. Le implementazioni personalizzate dovrebbero offrire un comportamento simile.
RefreshInterval e CleanupInterval
La proprietà RefreshInterval
di CustomPeerResolverService definisce il periodo di validità dei record di registrazione nella tabella di ricerca della registrazione del servizio. Superata la quantità di tempo fornita a questa proprietà per un determinato record, tale record non risulta più aggiornato e viene contrassegnato per l'eliminazione.
La proprietà CleanupInterval
di CustomPeerResolverService specifica al servizio la frequenza con la quale cercare ed eliminare i record di registrazione non aggiornati. È necessario impostare la proprietà CleanupInterval
su un valore superiore o uguale al valore RefreshInterval
impostato nel servizio.
Per implementare il proprio servizio resolver, è necessario scrivere una funzione di manutenzione per rimuovere i record di registrazione non aggiornati. Questa operazione può essere eseguita in diversi modi:
Manutenzione periodica: impostare un timer in modo che si disattivi periodicamente ed esaminare l'archivio dati per eliminare i record obsoleti. Questo approccio è utilizzato da CustomPeerResolverService.
Eliminazione passiva: anziché cercare attivamente i record non aggiornati a intervalli regolari, è possibile identificare ed eliminare i record non aggiornati quando il servizio esegue già un'altra funzione. Questo approccio potrebbe potenzialmente rallentare i tempi di risposta alle richieste dei client resolver, ma elimina la necessità di un timer e potrebbe rivelarsi più efficiente qualora si preveda che un numero ridotto di nodi abbandoni la rete senza chiamare
Unregister
.
RegistrationLifetime e Refresh
Quando un nodo effettua la registrazione con un servizio resolver, riceve un oggetto RegisterResponseInfo dal servizio. La proprietà RegistrationLifetime
di questo oggetto indica al nodo il tempo a sua disposizione prima che scada la registrazione e venga rimosso dal servizio resolver. Se, ad esempio, RegistrationLifetime
è pari a 2 minuti, il nodo deve chiamare Refresh
in meno di 2 minuti per assicurarsi che il record rimanga aggiornato e non venga eliminato. Quando il servizio resolver riceve una richiesta Refresh
, cerca il record e reimposta la data di scadenza. Refresh restituisce un oggetto RefreshResponseInfo con una proprietà RegistrationLifetime
.