Delen via


Distributie van berichten beperken

Peer Channel is standaard een broadcast-mesh. Het basisstroommodel omvat het distribueren van elk bericht dat door een lid van een mesh naar alle andere leden van dat mesh wordt verzonden. Dit is ideaal in situaties waarin elk bericht dat door een lid wordt gegenereerd relevant en nuttig is voor alle andere leden (bijvoorbeeld een chatruimte). Veel toepassingen hebben echter af en toe behoefte aan het beperken van berichtdistributie. Als een nieuw lid bijvoorbeeld lid wordt van een mesh en het laatste bericht dat via de mesh wordt verzonden, wil ophalen, hoeft deze aanvraag niet te worden overspoeld naar elk lid van de mesh. De aanvraag kan worden beperkt tot dichtstbijzijnde buren of lokaal gegenereerde berichten kunnen worden gefilterd. Berichten kunnen ook worden verzonden naar een afzonderlijk knooppunt op de mesh. In dit onderwerp wordt het gebruik van Hop Count, een filter voor berichtdoorgifte, een lokaal filter of een directe verbinding besproken om te bepalen hoe berichten in de mesh worden doorgestuurd en bevat algemene richtlijnen voor het kiezen van een benadering.

Hopaantallen

Het concept is PeerHopCount vergelijkbaar met TTL (Time-To-Live) dat wordt gebruikt in het IP-protocol. De waarde van PeerHopCount is gekoppeld aan een berichtexemplaren en geeft aan hoe vaak een bericht moet worden doorgestuurd voordat het wordt verwijderd. Telkens wanneer een bericht wordt ontvangen door een Peer Channel-client, onderzoekt de client het bericht om te zien of PeerHopCount dit is opgegeven. Als deze is opgegeven, wordt de waarde voor het aantal hops door de client met één verminderd voordat het bericht wordt doorgestuurd naar aangrenzende knooppunten. Wanneer een client een bericht ontvangt met een waarde voor het aantal hops van nul, verwerkt de client het bericht, maar stuurt het bericht niet door naar buren.

Het aantal hops kan worden toegevoegd aan een bericht door als kenmerk toe te voegen PeerHopCount aan de toepasselijke eigenschap of het betreffende veld in de implementatie van de berichtklasse. U kunt dit instellen op een specifieke waarde voordat u het bericht naar de mesh verzendt. Op deze manier kunt u het aantal hops gebruiken om de distributie van berichten in de mesh zo nodig te beperken, waardoor onnodige berichtduplicatie mogelijk wordt voorkomen. Dit is handig in gevallen waarin de mesh een grote hoeveelheid redundante gegevens bevat, of voor het verzenden van een bericht naar directe buren of buren binnen een paar hops.

Filter voor berichtdoorgifte

MessagePropagationFilter kan worden gebruikt voor aangepaste controle over het overstromen van berichten, met name wanneer de inhoud van het bericht of andere specifieke scenario's de doorgifte bepalen. Het filter neemt beslissingen over doorgifte voor elk bericht dat via het knooppunt wordt doorgegeven. Dit geldt voor berichten die elders in de mesh afkomstig zijn die uw knooppunt heeft ontvangen en berichten die door uw toepassing zijn gemaakt. Het filter heeft toegang tot zowel het bericht als de oorsprong ervan, zodat beslissingen over het doorsturen of verwijderen van het bericht kunnen worden gebaseerd op de volledige informatie die beschikbaar is.

PeerMessagePropagationFilteris een abstracte basisklasse met één functie. ShouldMessagePropagate Het eerste argument van de methode-aanroep geeft een volledige kopie van het bericht door. Wijzigingen die in het bericht zijn aangebracht, hebben geen invloed op het werkelijke bericht. Het laatste argument van de methode-aanroep identificeert de oorsprong van het bericht (PeerMessageOrigination.Local of PeerMessageOrigination.Remote). Concrete implementaties van deze methode moeten een constante retourneren uit de PeerMessagePropagation opsomming die aangeeft dat het bericht moet worden doorgestuurd naar de lokale toepassing (Local), doorgestuurd naar externe clients (), beide (RemoteLocalAndRemote) of geen van beide (None). Dit filter kan worden toegepast door toegang te krijgen tot het bijbehorende PeerNode object en een exemplaar op te geven van de afgeleide doorgiftefilterklasse in de PeerNode.MessagePropagationFilter eigenschap. Zorg ervoor dat het doorgiftefilter is gekoppeld voordat u het peerkanaal opent.

Contact opnemen met een afzonderlijk knooppunt in de Mesh

Er kan contact worden gemaakt met een afzonderlijk knooppunt in een mesh door een lokaal filter in te stellen of door een directe verbinding in te stellen.

Als de knooppunten in een mesh elk een afzonderlijke id hebben, kan een doel-id worden opgegeven in de implementatie van uw bericht. U kunt een lokaal filter instellen door een functie in uw berichtcontract te schrijven waarmee alleen het bericht wordt weergegeven op het huidige knooppunt als de id overeenkomt met de doel-id die u hebt opgegeven. De mesh transporteert het bericht, dus de overhead van het instellen van een nieuwe verbinding hoeft niet te worden gemaakt. Er is echter sprake van een verlies van efficiëntie omdat het bericht vaak in de mesh wordt verzonden. Dit werkt goed voor het verzenden van berichten naar afzonderlijke leden van een mesh zolang de berichten niet te groot of te vaak zijn.

Voor langdurige verbindingen met hoge bandbreedte hebben directe verbindingen de voorkeur. U kunt verbindingsgegevens via de mesh verzenden en vervolgens een directe verbinding instellen voor het verzenden/ontvangen van berichten.

Een methode kiezen voor het beperken van berichtdistributie

Wanneer u een scenario ontdekt waarin u de distributie van berichten wilt beperken, stelt u zich de volgende vragen:

  • Wie moet het bericht ontvangen? Slechts één buurknooppunt? Een knooppunt ergens anders in de mesh? De helft van de mesh?

  • Hoe vaak wordt dit bericht verzonden?

  • Welk soort bandbreedte gebruikt dit bericht?

De antwoorden op deze vragen kunnen u helpen bepalen of u Hop Count, een berichtdoorgiftefilter, een lokaal filter of een directe verbinding wilt gebruiken. Houd rekening met de volgende algemene richtlijnen:

  • Wie

    • Afzonderlijk knooppunt: lokaal filter of directe verbinding.

    • Buren binnen een bepaalde omgeving: PeerHopCount.

    • Complexe subset van de mesh: MessagePropagationFilter.

  • Hoe vaak

    • Zeer frequent: Directe verbinding, PeerHopCount, MessagePropagationFilter.

    • Af en toe: Lokaal filter.

  • Bandbreedtegebruik

    • Hoog: Directe verbinding, minder raadzaam om MessagePropagationFilter of lokaal filter te gebruiken.

    • Laag: Elke directe verbinding is waarschijnlijk niet nodig.

Zie ook