Beschränken der NachrichtenverteilungLimiting Message Distribution

Der Peerkanal ist als Übertragungsnetz konzipiert.Peer Channel is by design a broadcast mesh. Das grundlegende Weitergabemodell umfasst die Verteilung jeder Nachricht, die von einem Mitglied eines Netzes gesendet wird, an alle anderen Mitglieder dieses Netzes.Its basic flooding model involves distributing each message sent by any member of a mesh to all other members of that mesh. Dies ist besonders in Situationen von Vorteil, in denen jede von einem Mitglied generierte Nachricht für alle anderen Mitglieder relevant und hilfreich ist – beispielsweise in einem Chatraum.This is ideal in situations where every message generated by a member is relevant and useful to all other members (for example, a chat room). Bei vielen Anwendungen muss die Nachrichtenverteilung jedoch gelegentlich eingeschränkt werden.However, many applications have an occasional need for limiting message distribution. Tritt beispielsweise ein neues Mitglied dem Netz bei und möchte die letzte durch das Netz gesendete Nachricht abrufen, muss diese Anforderung nicht an alle Mitglieder des Netzes weitergeleitet werden.For example, if a new member joins a mesh and wants to retrieve the last message sent through the mesh, this request does not need to be flooded to every member of the mesh. Die Anforderung kann auf nahe gelegene Nachbarn beschränkt werden, oder es können lokal generierte Nachrichten herausgefiltert werden. Nachrichten können auch an einen einzelnen Knoten des Netzes gesendet werden.The request could be limited to near neighbors, or locally generated messages can be filtered out. Messages can also be sent to an individual node on the mesh. In diesem Thema wird erläutert, wie mithilfe der Hopanzahl, eines Nachrichtenweitergabefilters, eines lokalen Filters oder einer Direktverbindung gesteuert werden kann, auf welche Weise Nachrichten innerhalb des Netzes weitergeleitet werden. Darüber hinaus finden Sie hier allgemeine Richtlinien für die Auswahl eines geeigneten Ansatzes.This topic discusses using Hop Count, a Message Propagation Filter, a local filter, or a direct connection to control how messages are forwarded throughout the mesh, and provides general guidelines for choosing an approach.

HopanzahlHop Counts

Das PeerHopCount-Konzept ähnelt dem im IP verwendeten TTL (Time-To-Live)-Konzept.The concept of PeerHopCount is similar to TTL (Time-To-Live) used in IP protocol. Der PeerHopCount-Wert ist mit einer Nachrichteninstanz verknüpft und gibt an, wie häufig eine Nachricht weitergeleitet werden soll, bis sie verworfen wird.The value of PeerHopCount is tied to a message instance, and it specifies how many times a message should be forwarded before being dropped. Jedes Mal, wenn eine Nachricht von einem Peerkanalclient empfangen wird, wird vom Client geprüft, ob für die Nachricht ein PeerHopCount angegeben ist.Each time a message is received by a Peer Channel client, the client examines the message to see if PeerHopCount is specified. Ist ein solcher Wert vorhanden, wird die Hopanzahl durch den Client um "1" verringert, bevor die Nachricht an benachbarte Knoten weitergeleitet wird.If it is specified, then the client decrements the hop count value by one before forwarding the message to neighboring nodes. Erhält ein Client eine Nachricht mit der Hopanzahl "0", wird die Nachricht zwar verarbeitet, aber nicht mehr an Nachbarn weitergeleitet.When a client receives a message with a hop count value of zero, the client processes the message, but does not forward the message to neighbors.

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.Hop count may be added to a message by adding PeerHopCount as an attribute to the applicable property or field in the implementation of the message class. Sie können hierfür vor dem Senden der Nachricht an das Netz einen bestimmten Wert festlegen.You can set this to a specific value before sending the message to the mesh. 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.In this manner, you can use hop count to limit distribution of messages throughout the mesh when necessary, potentially avoiding unnecessary message duplication. Dies ist hilfreich, wenn das Netz eine große Menge redundanter Daten enthält oder wenn Nachrichten nur an direkte Nachbarn (oder an Nachbarn, die nur wenige Hops entfernt sind) gesendet werden sollen.This is useful in cases where the mesh contains a high amount of redundant data, or for sending a message to immediate neighbors, or neighbors within a few hops.

NachrichtenweitergabefilterMessage Propagation Filter

MessagePropagationFilter dient zum benutzerdefinierten Steuern der Nachrichtenweitergabe, besonders in Fällen, in denen die Weitergabe durch den Inhalt der Nachricht oder durch andere spezifische Szenarios bestimmt wird.MessagePropagationFilter can be used for customized control of message flooding, especially when the content of the message or other specific scenarios determine propagation. Durch den Filter werden für jede Nachricht, die den Knoten passiert, Weitergabenentscheidungen getroffen.The filter makes propagation decisions for every message that passes through the node. Dies gilt sowohl für Nachrichten, die von einem anderen Punkt innerhalb des Netzes stammen und von Ihrem Knoten empfangen werden, als auch für Nachrichten, die in Ihrer Anwendung erstellt wurden.This is true for messages that originated elsewhere in the mesh that your node has received as well as messages created by your application. Der Filter kann sowohl auf die Nachricht als auch auf deren Ursprung zugreifen, sodass Entscheidungen über die Weiterleitung oder das Verwerfen der Nachricht auf der Grundlage der vollständig verfügbaren Informationen getroffen werden können.The filter has access to both the message and its origination, so decisions about forwarding or dropping the message can be based on the full information available.

PeerMessagePropagationFilter ist eine abstrakte Basisklasse mit einer einzelnen Funktion: ShouldMessagePropagate.PeerMessagePropagationFilter is a base abstract class with a single function, ShouldMessagePropagate. Das erste Argument des Methodenaufrufs übergibt eine vollständige Kopie der Nachricht.The first argument of the method call passes in a full copy of the message. Änderungen an der Nachricht wirken sich nicht auf die eigentliche Nachricht aus.Any changes made to the message do not affect the actual message. Das letzte Argument des Methodenaufrufs identifiziert den Ursprung der Nachricht (PeerMessageOrigination.Local oder PeerMessageOrigination.Remote).The last argument of the method call identifies the origin of the message (PeerMessageOrigination.Local or PeerMessageOrigination.Remote). Konkrete Implementierungen dieser Methode müssen eine Konstante aus der PeerMessagePropagation-Enumeration zurückgeben, die angibt, dass die Nachricht an die lokale Anwendung (Local), an Remoteclients (Remote), an beide dieser Optionen (LocalAndRemote) oder an keine dieser Optionen (None) weitergeleitet werden soll.Concrete implementations of this method must return a constant from the PeerMessagePropagation enumeration indicating that the message is to be forwarded to the local application (Local), forwarded to remote clients (Remote), both (LocalAndRemote), or neither (None). Sie können diesen Filter durch Zugreifen auf das entsprechende PeerNode-Objekt und Angeben einer Instanz der abgeleiteten Weitergabefilterklasse in der PeerNode.MessagePropagationFilter-Eigenschaft anwenden.This filter can be applied by accessing the corresponding PeerNode object and specifying an instance of the derived propagation filter class in the PeerNode.MessagePropagationFilter property. Vergewissern Sie sich vor dem Öffnen des Peerkanals, dass der Weitergabefilter angefügt ist.Ensure that the propagation filter is attached before opening the Peer Channel.

Kontaktieren eines einzelnen NetzknotensContacting an Individual Node in the Mesh

Ein einzelner Netzknoten kann durch Einrichten eines lokalen Filters oder durch Einrichten einer Direktverbindung kontaktiert werden.An individual node in a mesh can be contacted by setting up a local filter, or by setting up a direct connection.

Besitzen die Knoten innerhalb eines Netzes individuelle IDs, können Sie in der Implementierung Ihrer Nachricht eine Ziel-ID angeben.If the nodes in a mesh each have an individual ID, a destination ID can be specified in the implementation of your message. Ein lokaler Filter kann durch Schreiben einer Funktion in den Nachrichtenvertrag eingerichtet werden. Dadurch wird die Nachricht lediglich für den aktuellen Knoten angezeigt, wenn dessen ID mit der angegebenen Ziel-ID übereinstimmt.A local filter can be set up by writing a function in your message contract that will only display the message to the current node if its ID matches the destination ID you specified. Die Nachricht wird durch das Netz transportiert, weshalb kein Mehraufwand zum Einrichten einer neuen Verbindung entsteht.The mesh transports the message, so the overhead of setting up a new connection does not have to be incurred. Es ergibt sich jedoch ein Verlust an Effizienz, da die Nachricht mehrmals durch das Netz gesendet wird.However, there is a loss of efficiency since the message is sent many times throughout the mesh. Dieses Verfahren eignet sich gut zum Senden von Nachrichten an einzelne Mitglieder eines Netzes, vorausgesetzt, die Nachrichten sind nicht zu umfangreich und werden nicht zu häufig gesendet.This works well for sending messages to individual members of a mesh as long as the messages are neither too big nor too frequent.

Bei dauerhaften Verbindungen mit hoher Bandbreite empfiehlt sich die Verwendung einer Direktverbindung.For long-lasting, high-bandwidth connections, direct connections are preferable. Sie können Verbindungsinformationen über das Netz senden und anschließend eine Direktverbindung zum Senden/Empfangen von Nachrichten einrichten.You can send connection information over the mesh, and then set up a direct connection of your choosing to send/receive messages.

Auswählen eines Ansatzes zum Beschränken der NachrichtenverteilungChoosing an Approach for Limiting Message Distribution

Ist eine Einschränkung der Nachrichtenverteilung erforderlich, sollten Sie sich die folgenden Fragen stellen:When you discover a scenario in which you need to limit message distribution, ask yourself the following questions:

  • Wer** muss die Nachricht empfangen?Who needs to receive the message? Lediglich ein Nachbarknoten?Just one neighbor node? Ein Knoten an einem anderen Ort im Netz?A node somewhere else in the mesh? Die Hälfte des Netzes?Half the mesh?

  • Wie oft wird diese Nachricht gesendet werden?How often will this message be sent?

  • Welche Art von Bandbreite wird diese Nachricht verwenden?What kind of bandwidth will this message use?

Die Antworten auf die Fragen können Ihnen die Entscheidung für eine der Methoden – Hopanzahl, Nachrichtenweitergabefilter, lokaler Filter oder Direktverbindung – erleichtern.The answers to these questions can help you determine whether to use Hop Count, a Message Propagation Filter, a local filter, or a direct connection. Berücksichtigen Sie die folgenden allgemeinen Richtlinien:Consider the following general guidelines:

  • ,Who

    • Einzelne Knoten: lokaler Filter oder direktverbindung.Individual node: Local filter or direct connection.

    • Nachbarn innerhalb einer bestimmten: PeerHopCount.Neighbors within a certain vicinity: PeerHopCount.

    • Komplexe Teilmenge des Netzes: MessagePropagationFilter.Complex subset of the mesh: MessagePropagationFilter.

  • Wie oftHow often

    • Sehr häufig: Direktverbindung, PeerHopCount, MessagePropagationFilter.Very frequent: Direct connection, PeerHopCount, MessagePropagationFilter.

    • Gelegentlich: lokaler Filter.Occasional: Local filter.

  • Nutzung der NetzwerkbandbreiteBandwidth use

    • Hohe: Direktverbindung, weniger ratsam, MessagePropagationFilter oder lokalem Filter verwenden.High: Direct connection, less advisable to use MessagePropagationFilter or local filter.

    • Niedrige: beliebig; direktverbindung wahrscheinlich nicht erforderlich.Low: Any, direct connection probably not needed.

Siehe auchSee Also

Erstellen einer PeerkanalanwendungBuilding a Peer Channel Application