Подробная информация о 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.

См. также