Dela via


Begränsa meddelandedistribution

Peer Channel är avsiktligt ett sändningsnät. Den grundläggande översvämningsmodellen innebär att varje meddelande som skickas av en medlem i ett nät distribueras till alla andra medlemmar i det nätet. Detta är idealiskt i situationer där varje meddelande som genereras av en medlem är relevant och användbart för alla andra medlemmar (till exempel ett chattrum). Många program har dock ett tillfälligt behov av att begränsa meddelandedistributionen. Om en ny medlem till exempel ansluter till ett nät och vill hämta det senaste meddelandet som skickas via nätet, behöver den här begäran inte översvämmas till varje medlem i nätet. Begäran kan begränsas till nära grannar, eller så kan lokalt genererade meddelanden filtreras bort. Meddelanden kan också skickas till en enskild nod i nätet. Det här avsnittet beskriver hur du använder Hop Count, ett filter för meddelandespridning, ett lokalt filter eller en direktanslutning för att styra hur meddelanden vidarebefordras i hela nätet och innehåller allmänna riktlinjer för att välja en metod.

Antal hopp

Begreppet PeerHopCount liknar TTL (Time-To-Live) som används i IP-protokollet. Värdet PeerHopCount för är kopplat till en meddelandeinstans och anger hur många gånger ett meddelande ska vidarebefordras innan det tas bort. Varje gång ett meddelande tas emot av en Peer Channel-klient undersöker klienten meddelandet för att se om PeerHopCount har angetts. Om det anges minskar klienten värdet för antalet hopp med en innan meddelandet vidarebefordras till närliggande noder. När en klient tar emot ett meddelande med ett hoppantal på noll bearbetar klienten meddelandet, men vidarebefordrar inte meddelandet till grannar.

Hoppantal kan läggas till i ett meddelande genom att lägga PeerHopCount till som ett attribut till den tillämpliga egenskapen eller fältet i implementeringen av meddelandeklassen. Du kan ange detta till ett specifikt värde innan du skickar meddelandet till nätet. På så sätt kan du använda hoppantal för att begränsa distributionen av meddelanden i hela nätet vid behov, vilket kan undvika onödig meddelandeduplicering. Detta är användbart i fall där nätet innehåller en hög mängd redundanta data, eller för att skicka ett meddelande till närmaste grannar eller grannar inom några få hopp.

Filter för meddelandespridning

MessagePropagationFilter kan användas för anpassad kontroll av översväxning av meddelanden, särskilt när innehållet i meddelandet eller andra specifika scenarier bestämmer spridning. Filtret fattar spridningsbeslut för varje meddelande som passerar genom noden. Detta gäller för meddelanden som har sitt ursprung någon annanstans i det nät som noden har tagit emot samt meddelanden som skapats av ditt program. Filtret har åtkomst till både meddelandet och dess ursprung, så beslut om vidarebefordran eller avsläppning av meddelandet kan baseras på den fullständiga tillgängliga informationen.

PeerMessagePropagationFilter är en grundläggande abstrakt klass med en enda funktion, ShouldMessagePropagate. Det första argumentet i metodanropet skickar en fullständig kopia av meddelandet. Ändringar som görs i meddelandet påverkar inte det faktiska meddelandet. Det sista argumentet i metodanropet identifierar meddelandets ursprung (PeerMessageOrigination.Local eller PeerMessageOrigination.Remote). Konkreta implementeringar av den här metoden måste returnera en konstant från uppräkningen som anger att meddelandet ska vidarebefordras till det lokala programmet (), vidarebefordras till fjärrklienter PeerMessagePropagation (Remote), båda (LocalAndRemote) eller ingen av dem (None).Local Det här filtret kan användas genom att komma åt motsvarande PeerNode objekt och ange en instans av den härledda spridningsfilterklassen PeerNode.MessagePropagationFilter i egenskapen. Kontrollera att spridningsfiltret är kopplat innan peer-kanalen öppnas.

Kontakta en enskild nod i mesh

En enskild nod i ett nät kan kontaktas genom att konfigurera ett lokalt filter eller genom att konfigurera en direktanslutning.

Om noderna i ett nät var och en har ett enskilt ID kan ett mål-ID anges i implementeringen av meddelandet. Du kan konfigurera ett lokalt filter genom att skriva en funktion i meddelandekontraktet som endast visar meddelandet till den aktuella noden om dess ID matchar mål-ID:t som du angav. Mesh transporterar meddelandet, så omkostnaderna för att konfigurera en ny anslutning behöver inte uppstå. Det finns dock en effektivitetsförlust eftersom meddelandet skickas många gånger i nätet. Detta fungerar bra för att skicka meddelanden till enskilda medlemmar i ett nät så länge meddelandena varken är för stora eller för frekventa.

För långvariga anslutningar med hög bandbredd är direkta anslutningar att föredra. Du kan skicka anslutningsinformation via nätet och sedan konfigurera en direktanslutning som du väljer att skicka/ta emot meddelanden.

Välja en metod för att begränsa meddelandedistribution

När du upptäcker ett scenario där du behöver begränsa meddelandedistributionen kan du ställa dig följande frågor:

  • Vem måste ta emot meddelandet? Bara en grannnod? En nod någon annanstans i nätet? Halva nätet?

  • Hur ofta skickas det här meddelandet?

  • Vilken typ av bandbredd kommer det här meddelandet att använda?

Svaren på dessa frågor kan hjälpa dig att avgöra om du vill använda Hop Count, ett filter för meddelandespridning, ett lokalt filter eller en direkt anslutning. Överväg följande allmänna riktlinjer:

  • Vem

    • Enskild nod: Lokalt filter eller direktanslutning.

    • Grannar inom en viss närhet: PeerHopCount.

    • Komplex delmängd av nätet: MessagePropagationFilter.

  • Hur ofta

    • Mycket frekvent: Direktanslutning, PeerHopCount, MessagePropagationFilter.

    • Tillfällig: Lokalt filter.

  • Bandbreddsanvändning

    • Hög: Direktanslutning, mindre lämpligt att använda MessagePropagationFilter eller lokalt filter.

    • Låg: Alla direktanslutningar behövs förmodligen inte.

Se även