Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Peer Channel ist von Natur aus ein Broadcast-Mesh. Das grundlegende Hochwassermodell umfasst die Verteilung jeder Nachricht, die von jedem Mitglied eines Gitters an alle anderen Mitglieder dieses Gitters gesendet wird. Dies ist ideal in Situationen, in denen jede von einem Mitglied generierte Nachricht relevant und nützlich für alle anderen Mitglieder ist (z. B. ein Chatroom). Viele Anwendungen haben jedoch gelegentlich Bedarf daran, die Nachrichtenverteilung zu begrenzen. Wenn beispielsweise ein neues Mitglied einem Gitter beitritt und die letzte nachricht abrufen möchte, die über das Gitter gesendet wurde, muss diese Anforderung nicht an jedes Mitglied des Gitters überflutet werden. Die Anforderung kann auf benachbarte Nachbarn beschränkt sein, oder lokal generierte Nachrichten können herausgefiltert werden. Nachrichten können auch an einen einzelnen Knoten im Gitter gesendet werden. In diesem Thema wird erläutert, wie Hop Count, ein Nachrichtenverteilungsfilter, ein lokaler Filter oder eine direkte Verbindung verwendet wird, um zu steuern, wie Nachrichten im gesamten Gitter weitergeleitet werden, und enthält allgemeine Richtlinien für die Auswahl eines Ansatzes.
Hopanzahl
Das PeerHopCount-Konzept ähnelt dem im IP verwendeten TTL (Time-To-Live)-Konzept. Der Wert von PeerHopCount ist an eine Nachrichteninstanz gebunden und gibt an, wie oft eine Nachricht weitergeleitet werden soll, bevor sie abgelegt wird. Jedes Mal, wenn eine Nachricht von einem Peerkanalclient empfangen wird, überprüft der Client die Nachricht, um festzustellen, ob PeerHopCount angegeben ist. Wenn sie angegeben ist, verringert der Client den Wert der Hopanzahl um Eins, bevor die Nachricht an benachbarte Knoten weitergeleitet wird. Wenn ein Client eine Nachricht mit einem Hopanzahlwert von Null empfängt, verarbeitet der Client die Nachricht, leitet die Nachricht aber nicht an Nachbarn weiter.
Sie können die Hopanzahl zu einer Nachricht hinzufügen, indem Sie PeerHopCount bei der Implementierung der Nachrichtenklasse als Attribut zu der anwendbaren Eigenschaft oder dem anwendbaren Feld hinzufügen. Sie können dies auf einen bestimmten Wert festlegen, bevor Sie die Nachricht an das Gitter senden. Auf diese Weise kann die Verteilung von Nachrichten innerhalb des Netzes mithilfe der Hopanzahl gegebenenfalls eingeschränkt werden, was zu einer Verringerung unnötiger doppelter Nachrichten führen kann. Dies ist in Fällen hilfreich, in denen das Netzwerk eine hohe Menge redundanter Daten enthält, oder um eine Nachricht an unmittelbare Nachbarn oder an Nachbarn innerhalb weniger Sprünge zu senden.
- Codeausschnitte und verwandte Informationen finden Sie im Beitrag "PeerHopCount Attribut: Steuerung der Nachrichtenverteilung" im Blog "Peer Channel".
Nachrichtenverteilungsfilter
MessagePropagationFilter kann zum angepassten Steuern von Nachrichtenfluten verwendet werden, insbesondere, wenn der Inhalt der Nachricht oder andere bestimmte Szenarien die Verteilung bestimmen. Der Filter trifft Verteilungsentscheidungen für jede Nachricht, die den Knoten durchläuft. Dies gilt für Nachrichten, die an anderer Stelle im Gitter stammen, die Ihr Knoten empfangen hat, sowie nachrichten, die von Ihrer Anwendung erstellt wurden. Der Filter hat Zugriff sowohl auf die Nachricht als auch auf die Herkunft, sodass Entscheidungen zum Weiterleiten oder Ablegen der Nachricht auf den verfügbaren vollständigen Informationen basieren können.
PeerMessagePropagationFilterist eine abstrakte Basisklasse mit einer einzelnen Funktion. ShouldMessagePropagate Das erste Argument des Methodenaufrufs übergibt eine vollständige Kopie der Nachricht. Alle An der Nachricht vorgenommenen Änderungen wirken sich nicht auf die tatsächliche Nachricht aus. Das letzte Argument des Methodenaufrufs identifiziert den Ursprung der Nachricht (PeerMessageOrigination.Local oder PeerMessageOrigination.Remote). Konkrete Implementierungen dieser Methode müssen eine Konstante aus der PeerMessagePropagation Enumeration zurückgeben, die anzeigt, dass die Nachricht entweder an die lokale Anwendung weitergeleitet werden soll (Local), an Remote-Clients weitergeleitet werden soll (Remote), an beide weitergeleitet werden soll (LocalAndRemote), oder an keines von beiden (None). Dieser Filter kann angewendet werden, indem er auf das entsprechende PeerNode Objekt zugreift und eine Instanz der abgeleiteten Verteilungsfilterklasse in der PeerNode.MessagePropagationFilter Eigenschaft angibt. Stellen Sie sicher, dass der Propagationsfilter vorhanden ist, bevor Sie den Peer-Kanal öffnen.
- Codeausschnitte und zugehörige Informationen finden Sie im Beitrag " Peer Channel" und "MessagePropagationFilter " im Blog "Peer Channel".
Kontaktieren eines einzelnen Knotens im Gitter
Ein einzelner Knoten in einem Gitter kann durch Einrichten eines lokalen Filters oder durch Einrichten einer direkten Verbindung kontaktiert werden.
Wenn die Knoten in einem Gitter jeweils über eine einzelne ID verfügen, kann eine Ziel-ID in der Implementierung Ihrer Nachricht angegeben werden. Ein lokaler Filter kann eingerichtet werden, indem eine Funktion in Ihrem Nachrichtenvertrag geschrieben wird, die die Nachricht nur an den aktuellen Knoten anzeigt, wenn die ID mit der angegebenen Ziel-ID übereinstimmt. Das Gitter transportiert die Nachricht, sodass der Aufwand für die Einrichtung einer neuen Verbindung nicht anfallen muss. Es gibt jedoch einen Effizienzverlust, da die Nachricht mehrmals im Gitter gesendet wird. Dies eignet sich gut für das Senden von Nachrichten an einzelne Mitglieder eines Gitters, solange die Nachrichten weder zu groß noch zu häufig sind.
Bei langanhaltenden Verbindungen mit hoher Bandbreite sind direkte Verbindungen vorzuziehen. Sie können Verbindungsinformationen über das Gitter senden und dann eine direkte Verbindung ihrer Wahl zum Senden/Empfangen von Nachrichten einrichten.
Auswählen eines Ansatzes zum Einschränken der Nachrichtenverteilung
Wenn Sie ein Szenario entdecken, in dem Sie die Nachrichtenverteilung einschränken müssen, stellen Sie sich die folgenden Fragen:
Wer muss die Nachricht empfangen? Lediglich ein Nachbarknoten? Ein Knoten an einer anderen Stelle im Gitter? Hälfte des Gitters?
Wie oft wird diese Nachricht gesendet?
Welche Bandbreite wird von dieser Nachricht verwendet?
Die Antworten auf diese Fragen können Ihnen helfen zu bestimmen, ob Hop Count, ein Nachrichtenverteilungsfilter, ein lokaler Filter oder eine direkte Verbindung verwendet werden soll. Beachten Sie die folgenden allgemeinen Richtlinien:
Wer
Einzelner Knoten: Lokaler Filter oder direkte Verbindung.
Nachbarn innerhalb einer bestimmten Umgebung: PeerHopCount.
Komplexe Teilmenge des Gitters: MessagePropagationFilter.
Wie viel Mal
Sehr häufig: Direkte Verbindung, PeerHopCount, MessagePropagationFilter.
Gelegentlich: Lokaler Filter.
Bandbreitennutzung
Hoch: Direkte Verbindung, weniger ratsam, MessagePropagationFilter oder lokalen Filter zu verwenden.
Niedrig: Jede direkte Verbindung ist wahrscheinlich nicht erforderlich.