Подробная информация о CustomPeerResolverService: регистрация клиентов
Каждый узел в сетке публикует информацию о своей конечной точке в службе распознавателя с помощью функции Register
. Служба распознавателя хранит эту информацию в виде регистрационной записи. Эта запись содержит уникальный идентификатор (RegistrationID) и информацию о конечной точке (PeerNodeAddress) для узла.
Устаревшие записи и срок действия
В идеальном случае, когда узел покидает сетку, он вызывает функцию Unregister
, после чего служба распознавателя удаляет регистрационную запись. Иногда узлы закрываются или становятся недоступными перед вызовом функции Unregister
, оставляя устаревшую регистрационную запись.
Устаревшие записи в службе распознавателя могут стать причиной сбоя подключения. Если узел, который пытается подключиться к сетке, получает информацию об устаревшем соединении от службы распознавателя, для успешного подключения к сетке может потребоваться больше времени. Устаревшие записи также занимают место в памяти. Без эффективного процесса очистки кэш, используемый для хранения регистрационных записей, может в конечном счете переполниться и вызвать сбой службы распознавателя.
Служба CustomPeerResolverService указывает срок действия (DateTime) для каждой записи и сохраняет эту информацию как часть записи. Служба использует срок действия для определения устаревших записей. Пользовательские реализации выполняются подобным же образом.
RefreshInterval и CleanupInterval
Свойство RefreshInterval
службы CustomPeerResolverService определяет срок действия регистрационных записей в таблице подстановки регистрационных записей службы. По истечении срока действия, указанного в этом свойстве для определенной записи, она становится устаревшей и помечается для удаления.
Свойство CleanupInterval
службы CustomPeerResolverService определяет периодичность поиска и удаления устаревших регистрационных записей. Срок, указанный в свойстве CleanupInterval
, должен быть не менее указанного в свойстве RefreshInterval
этой службы.
Чтобы реализовать собственную службу распознавателя, необходимо записать функцию обслуживания для удаления устаревших регистрационных записей. Это можно сделать несколькими способами:
Периодическое обслуживание: установите таймер для периодического отключения и перейдите через хранилище данных для удаления старых записей. Этот подход используется в службе CustomPeerResolverService.
Пассивное удаление: вместо активного поиска устаревших записей через регулярные интервалы можно определить и удалить устаревшие записи, когда служба уже выполняет другую функцию. Потенциально это может увеличить время отклика на запросы от клиентов распознавателя, но устраняет необходимость в таймере. Этот способ может быть более эффективным, если ожидается, что несколько узлов покинут сетку без вызова функции
Unregister
.
RegistrationLifetime и Refresh
Когда узел регистрируется в службе распознавателя, он получает объект RegisterResponseInfo от службы. Этот объект имеет свойство RegistrationLifetime
, в котором содержится информация о времени, оставшемся до истечения срока действия регистрации и удаления узла службой распознавателя. Если, например, срок действия регистрации RegistrationLifetime
составляет 2 минуты, узел должен вызвать функцию Refresh
в течение не более 2 минут, чтобы запись не перешла в разряд устаревших и не была удалена. Когда служба распознавателя получает запрос Refresh
, она ищет запись и сбрасывает срок действия. Функция Refresh возвращает объект RefreshResponseInfo со свойством RegistrationLifetime
.