Поделиться через


Поиск в таблице распределенной маршрутизации

Прежде чем приложение сможет выполнять поиск в распределенной таблице маршрутизации (DRT), необходимо создать поисковый запрос. Требуемое значение ключа указывается приложением при вызове функции DrtStartSearch . Поведение поиска определяется сведениями, указанными приложением в структуре DRT_SEARCH_INFO .

Как правило, событие приложения сигнализируется при обнаружении результатов поиска, а другое — в конце поиска. Однако, если параметр fIterative задан в DRT_SEARCH_INFO, событие приложения может быть сигнализировать при контакте с каждым узлом на этом пути.

После передачи сигнала о событии приложение вызывает функцию DrtGetSearchResult для получения результатов. Если возвращенный код S_OK, результаты указываются в структуре DRT_SEARCH_RESULT , возвращаемой API. Возвращаемые результаты попадают в диапазон значений, указанных в DRT_SEARCH_INFO. В случае, если поиск не находит совпадений, по завершении результата возвращается только значение DRT_E_NO_MORE .

Ниже приведены сведения о том, как элементы, содержащиеся в DRT_SEARCH_INFO , позволяют приложению определять поведение поиска в инфраструктуре DRT.

fAllowCurrentInstanceMatch

По умолчанию результаты поиска DRT содержат только совпадения, найденные за пределами локального узла. Параметр fAllowCurrentInstanceMatch указывает, что результаты поиска также содержат совпадения, найденные в локальном экземпляре DRT.

cMaxEndpoints

Количество и диапазон результатов, возвращаемых поиском, задаются приложением с помощью значений cMaxEndpoints (quantity) и pMinimumKey и pMaximumKey (диапазон) и на которые ссылается DRT_SEARCH_INFO.

Если cMaxEndpoints = 1, инфраструктура DRT ищет ключ, возвращая одно совпадение в диапазоне, заданном значениями pMinimumKey и pMaximumKey в DRT_SEARCH_INFO. Это может быть либо точное совпадение, либо ближайшее совпадение в диапазоне. Если совпадение не найдено, возвращается DRT_E_NO_MORE .

Если cMaxEndpoints > 1, инфраструктура DRT будет возвращать совпадения в диапазоне до значения cMaxEndpoints. Возвращаемые совпадения могут содержать точное совпадение или ближайшие результаты соответствия в пределах диапазона. Кроме того, если pMinimumKey и pMaximumKey имеют одно и то же значение, поиск выполняется только для этого значения, возвращая DRT_E_NO_MORE , если оно не найдено.

fAnyMatchInRange

Элемент fAnyMatchInRange указывает, будет ли поиск остановлен после того, как первое совпадение будет находиться в указанном диапазоне, или будет ли продолжаться поиск ближайшего соответствия ключу, указанному в API DrtStartSearch . Если задан параметр fAnyMatchInRange , поиск выполняется с параметром cMaxEndpoints = 1 независимо от указанного значения cMaxEndpoints в DRT_SEARCH_INFO.

FIterative

Элемент fIterative указывает, будет ли каждый узел, к которым обращается инфраструктура DRT во время поиска, иметь связанные с ним данные ключа или конечной точки, доступные приложению через DRT_SEARCH_RESULT. Если задать для параметра fIterative значение TRUE, значение cMaxEndpoints = 1 будет принудительно установлено. Если параметру fIterative задано значение TRUE в поисковом запросе для DRT, приложение вызывается обратно после контакта с каждым узлом или "прыжком". Каждый результат прыжка содержит ключ, указывающий, какой узел DRT будет искать далее. Результат прыжка возвращается с помощью DrtGetSearchResult в виде результата DRT_MATCH_INTERMEDIATE .

pMinimumKey и pMaximumKey

Элементы pMinimumKey и pMaximumKey можно использовать для поиска ключей, попадающих в диапазон. Если элемент fAnyMatchInRange имеет значение FALSE, DRT вернет ближайшие ключи к целевому объекту поиска (указанному с помощью аргумента pKey, переданного в функции DrtStartSearch ), попадающие в диапазон. Обратите внимание, что аргумент pKey , передаваемый в DrtStartSearch , должен находиться в диапазоне, определенном pMinimumKey и pMaximumKey. Чтобы найти точный ключ, задайте для pMinimumKey, pMaximumKey и pKey одно и то же значение.

Регистрация и отмена регистрации ключей

Сведения о таблицах распределенной маршрутизации

Справочник по API таблицы распределенной маршрутизации