Omezení distribuce zpráv
Peer Channel je návrh sítě všesměrového vysílání. Jeho základní zahlcený model zahrnuje distribuci každé zprávy odeslané libovolným členem sítě všem ostatním členům této sítě. To je ideální v situacích, kdy je každá zpráva generovaná členem relevantní a užitečná pro všechny ostatní členy (například chatovací místnost). Řada aplikací ale občas potřebuje omezit distribuci zpráv. Pokud například nový člen spojí síť a chce načíst poslední zprávu poslanou přes síť, nemusí být tento požadavek zahlcený každému členovi sítě. Požadavek může být omezený na blízké sousedy nebo místně generované zprávy je možné vyfiltrovat. Zprávy se také dají odeslat na jednotlivé uzly v síti. Toto téma popisuje použití funkce Počet směrování, filtr šíření zpráv, místní filtr nebo přímé připojení k řízení způsobu přeposílání zpráv v celé síti a poskytuje obecné pokyny pro volbu přístupu.
Počet segmentů směrování
Koncept PeerHopCount
se podobá hodnotě TTL (Time-To-Live) používané v protokolu IP. Hodnota PeerHopCount
je svázaná s instancí zprávy a určuje, kolikrát se má zpráva před vyřazení přeposlat. Pokaždé, když klient partnerského kanálu přijme zprávu, klient zkontroluje zprávu a zjistí, jestli PeerHopCount
je zadaná. Pokud je zadaný, klient před předáním zprávy sousedním uzlům sníží hodnotu počtu směrování o jednu o jednu. Když klient obdrží zprávu s hodnotou počtu směrování nula, klient zprávu zpracuje, ale nepřepošle zprávu sousedům.
Počet segmentů směrování může být přidán do zprávy přidáním PeerHopCount
atributu do příslušné vlastnosti nebo pole v implementaci třídy zprávy. Před odesláním zprávy do sítě můžete tuto hodnotu nastavit na konkrétní hodnotu. Tímto způsobem můžete pomocí počtu segmentů směrování omezit distribuci zpráv v rámci sítě, pokud je to nutné, a potenciálně se vyhnout zbytečnému duplikování zpráv. To je užitečné v případech, kdy síť obsahuje velké množství redundantních dat nebo pro odeslání zprávy bezprostředním sousedům nebo sousedům v rámci několika segmentů směrování.
- Fragmenty kódu a související informace naleznete v tématu Atribut PeerHopCount: Řízení distribuce zpráv na blogu Peer Channel.
Filtr šíření zpráv
MessagePropagationFilter
lze použít pro přizpůsobenou kontrolu zahlcení zpráv, zejména v případě, že obsah zprávy nebo jiné konkrétní scénáře určují šíření. Filtr provádí rozhodnutí o šíření pro každou zprávu, která prochází uzlem. To platí pro zprávy, které pocházejí jinde v síti, kterou váš uzel přijal, a také pro zprávy vytvořené vaší aplikací. Filtr má přístup ke zprávě i k jeho původu, takže rozhodnutí o přeposílání nebo vyřazení zprávy můžou být založená na úplných dostupných informacích.
PeerMessagePropagationFilter je základní abstraktní třída s jedinou funkcí , ShouldMessagePropagate. První argument volání metody předá úplnou kopii zprávy. Žádné změny provedené ve zprávě nemají vliv na skutečnou zprávu. Poslední argument volání metody identifikuje původ zprávy (PeerMessageOrigination.Local
nebo PeerMessageOrigination.Remote
). Konkrétní implementace této metody musí vracet konstantu PeerMessagePropagation z výčtu označující, že zpráva se má předávat do místní aplikace (Local
), předávat vzdáleným klientům (Remote
), oběma (LocalAndRemote
) nebo ani jednomu (None
). Tento filtr lze použít přístupem k odpovídajícímu PeerNode
objektu a určení instance odvozené třídy filtru šíření ve PeerNode.MessagePropagationFilter
vlastnosti. Před otevřením partnerského kanálu se ujistěte, že je připojený filtr šíření.
- Fragmenty kódu a související informace najdete v příspěvku Peer Channel a MessagePropagationFilter na blogu Peer Channel.
Kontaktování jednotlivého uzlu v síti
Jednotlivé uzly v síti je možné kontaktovat nastavením místního filtru nebo nastavením přímého připojení.
Pokud uzly v síti mají jednotlivá ID, můžete v implementaci zprávy zadat cílové ID. Místní filtr lze nastavit napsáním funkce ve smlouvě se zprávou, která zobrazí zprávu pouze aktuálnímu uzlu, pokud jeho ID odpovídá zadanému cílovému ID. Síť přenáší zprávu, takže se nemusí účtovat režie při nastavování nového připojení. Dochází ale ke ztrátě efektivity, protože se zpráva odesílá mnohokrát v celé síti. To funguje dobře pro odesílání zpráv jednotlivým členům sítě, pokud nejsou zprávy příliš velké ani příliš časté.
U dlouhotrvajících připojení s velkou šířkou pásma je vhodnější přímé připojení. Informace o připojení můžete odesílat přes síť a pak nastavit přímé připojení, které se rozhodnete odesílat a přijímat zprávy.
Volba přístupu pro omezení distribuce zpráv
Když zjistíte scénář, ve kterém potřebujete omezit distribuci zpráv, položte si následující otázky:
Kdo musí zprávu přijmout? Jen jeden uzel souseda? Uzel někde jinde v síti? Polovina sítě?
Jak často se tato zpráva odešle?
Jaký druh šířky pásma bude tato zpráva používat?
Odpovědi na tyto otázky vám můžou pomoct určit, jestli se má použít počet směrování, filtr šíření zpráv, místní filtr nebo přímé připojení. Zvažte následující obecné pokyny:
Kdo
Jednotlivé uzly: Místní filtr nebo přímé připojení.
Sousedé v určitém okolí: PeerHopCount.
Složitá podmnožina sítě: MessagePropagationFilter.
Jak často
Velmi časté: přímé připojení, PeerHopCount, MessagePropagationFilter.
Příležitostné: Místní filtr.
Využití šířky pásma
Vysoká: Přímé připojení, méně vhodné použít MessagePropagationFilter nebo místní filtr.
Nízká: Jakékoli přímé připojení pravděpodobně není potřeba.