Durchsuchen einer verteilten Routingtabelle

Bevor eine Anwendung die Verteilte Routingtabelle (Distributed Routing Table, DRT) durchsuchen kann, muss eine Suchabfrage erstellt werden. Der gewünschte Schlüsselwert wird von der Anwendung angegeben, wenn die DrtStartSearch-Funktion aufgerufen wird. Das Verhalten der Suche wird durch Informationen bestimmt, die von der Anwendung in der DRT_SEARCH_INFO-Struktur angegeben werden.

In der Regel wird ein Anwendungsereignis signalisiert, wenn die Suche Ergebnisse und ein weiteres am Ende der Suche ermittelt. Wenn fIterativ jedoch in DRT_SEARCH_INFO festgelegt ist, kann ein Anwendungsereignis signalisiert werden, wenn ein Kontakt mit jedem Knoten hergestellt wird.

Nachdem ein Ereignis signalisiert wurde, ruft die Anwendung die DrtGetSearchResult-Funktion für die Ergebnisse auf. Wenn der zurückgegebene Code S_OK ist, werden die Ergebnisse in der von der API zurückgegebenen DRT_SEARCH_RESULT-Struktur angezeigt. Die zurückgegebenen Ergebnisse fallen in den in DRT_SEARCH_INFO angegebenen Wertebereich. Für den Fall, dass die Suche keine Übereinstimmungen findet, wird nur der DRT_E_NO_MORE Wert am Ende der Ergebnisrückgabe zurückgegeben.

In den folgenden Informationen wird beschrieben, wie die in DRT_SEARCH_INFO enthaltenen Member es einer Anwendung ermöglichen, das Suchverhalten der DRT-Infrastruktur speziell zu diktieren:

fAllowCurrentInstanceMatch

Standardmäßig enthalten DRT-Suchergebnisse nur Übereinstimmungen, die außerhalb des lokalen Knotens gefunden wurden. Das Festlegen von fAllowCurrentInstanceMatch gibt an, dass die Suchergebnisse auch Übereinstimmungen enthalten, die im lokalen DRT-instance gefunden wurden.

cMaxEndpoints

Die Menge und der Bereich der von der Suche zurückgegebenen Ergebnisse werden von der Anwendung mit den Werten cMaxEndpoints (quantity) und pMinimumKey und pMaximumKey (range) angegeben und von DRT_SEARCH_INFO referenziert.

Wenn cMaxEndpoints = 1 ist, sucht die DRT-Infrastruktur nach einem Schlüssel und gibt eine Übereinstimmung innerhalb des Bereichs zurück, der durch die Werte pMinimumKey und pMaximumKey in DRT_SEARCH_INFO angegeben wird. Diese Übereinstimmung kann entweder eine genaue Übereinstimmung oder die nächste Übereinstimmung innerhalb des Bereichs sein. Wenn keine Übereinstimmung gefunden wird, wird DRT_E_NO_MORE zurückgegeben.

Wenn cMaxEndpoints 1 ist, gibt die DRT-Infrastruktur Übereinstimmungen innerhalb des Bereichs >bis zum Wert von cMaxEndpoints zurück. Die zurückgegebenen Übereinstimmungen können eine genaue Übereinstimmung oder die nächsten Übereinstimmungsergebnisse innerhalb des Bereichs enthalten. Wenn pMinimumKey und pMaximumKey auf denselben Wert festgelegt sind, wird eine Suche nur für diesen Wert durchgeführt, und es wird DRT_E_NO_MORE zurückgegeben, wenn er nicht gefunden wird.

fAnyMatchInRange

Das fAnyMatchInRange-Element gibt an, ob die Suche beendet wird, nachdem die erste Übereinstimmung innerhalb des angegebenen Bereichs gefunden wurde, oder ob die Suche nach der nächsten Übereinstimmung mit dem in der DrtStartSearch-API angegebenen Schlüssel fortgesetzt wird. Wenn fAnyMatchInRange festgelegt ist, wird die Suche mit cMaxEndpoints = 1 durchgeführt, unabhängig vom angegebenen Wert von cMaxEndpoints in DRT_SEARCH_INFO.

fIterativ

Das fIterative-Element gibt an, ob jedem Knoten, der von der DRT-Infrastruktur während der Suche kontaktiert wird, die zugeordneten Schlüssel-/Endpunktdaten der Anwendung über DRT_SEARCH_RESULT zur Verfügung gestellt werden. Durch Festlegen von fIterativ auf TRUE wird der Wert von cMaxEndpoints = 1 erzwungen. Wenn fIterativ in einer Suchabfrage für das DRT auf TRUE festgelegt ist, wird die Anwendung nach dem Kontakt mit jedem Knoten oder "Hop" zurück aufgerufen. Jedes Hopergebnis enthält einen Schlüssel, der angibt, welchen Knoten das DRT als Nächstes durchsuchen wird. Ein Hopergebnis wird über DrtGetSearchResult als DRT_MATCH_INTERMEDIATE Ergebnis zurückgegeben.

pMinimumKey und pMaximumKey

Die Elemente pMinimumKey und pMaximumKey können verwendet werden, um nach Schlüsseln zu suchen, die in einen Bereich fallen. Wenn das fAnyMatchInRange-Element auf FALSE festgelegt ist, gibt die DRT die nächstgelegenen Schlüssel an das Suchziel zurück (angegeben mit dem pKey-Argument, das in der DrtStartSearch-Funktion übergeben wird), das innerhalb des Bereichs liegt. Beachten Sie, dass das an DrtStartSearch übergebene pKey-Argument innerhalb des durch pMinimumKey und pMaximumKey definierten Bereichs liegen muss. Um nach einem genauen Schlüssel zu suchen, legen Sie pMinimumKey, pMaximumKey und pKey auf den gleichen Wert fest.

Registrieren und Aufheben der Registrierung von Schlüsseln

Informationen zu verteilten Routingtabellen

API-Referenz für verteilte Routingtabellen