Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kanał typu peer jest zaprojektowany jako siatka transmisji. Jego podstawowy model zalewania obejmuje dystrybucję każdego komunikatu wysyłanego przez dowolnego członka siatki do wszystkich innych elementów członkowskich tej siatki. Jest to idealne rozwiązanie w sytuacjach, w których każda wiadomość wygenerowana przez członka jest odpowiednia i przydatna dla wszystkich innych członków (na przykład pokoju rozmów). Jednak wiele aplikacji ma okazjonalną potrzebę ograniczenia dystrybucji komunikatów. Na przykład, jeśli nowy członek dołączy do sieci i chce pobrać ostatnią wiadomość wysłaną przez sieć, to żądanie nie musi być rozsyłane do każdego członka sieci. Żądanie może być ograniczone do bliskich sąsiadów, a lokalnie generowane komunikaty mogą być odfiltrowywane. Komunikaty można również wysyłać do pojedynczego węzła w sieci typu mesh. W tym temacie omówiono używanie liczby przeskoku, filtru propagacji komunikatów, filtru lokalnego lub bezpośredniego połączenia w celu kontrolowania sposobu przekazywania komunikatów w całej siatce oraz ogólnych wytycznych dotyczących wybierania podejścia.
Liczba przeskoków
Koncepcja jest podobna PeerHopCount do czasu wygaśnięcia (time-To-Live) używanej w protokole IP. Wartość PeerHopCount elementu jest powiązana z wystąpieniem komunikatu i określa, ile razy komunikat powinien zostać przesłany dalej przed usunięciem. Za każdym razem, gdy klient kanału równorzędnego odbiera komunikat, sprawdza, czy PeerHopCount zostało określone. Jeśli jest to określone, klient zmniejsza liczbę przeskoków o jeden przed przekazaniem komunikatu do sąsiednich węzłów. Gdy klient odbiera komunikat z wartością liczby przeskoków o wartości zero, klient przetwarza komunikat, ale nie przekazuje komunikatu do sąsiadów.
Liczba przeskoków może zostać dodana do komunikatu przez dodanie PeerHopCount jako atrybutu do odpowiedniej właściwości lub pola w implementacji klasy komunikatu. Można ustawić tę wartość na określoną wartość przed wysłaniem komunikatu do siatki. W ten sposób można użyć liczby skoków, aby ograniczyć rozsyłanie komunikatów w siatce, jeśli zajdzie taka potrzeba, potencjalnie unikając niepotrzebnego duplikowania komunikatów. Jest to przydatne w przypadkach, gdy siatka zawiera dużą ilość nadmiarowych danych, lub do wysyłania komunikatu do bezpośrednich sąsiadów, lub sąsiadów w kilku przeskokach.
- Aby uzyskać fragmenty kodu i powiązane informacje, zobacz wpis Atrybut PeerHopCount: Kontrolowanie dystrybucji komunikatów na blogu Kanał rówieśniczy.
Filtr propagacji komunikatów
MessagePropagationFilter można używać do dostosowanej kontroli przepływu komunikatów, zwłaszcza gdy treść komunikatu lub inne konkretne scenariusze określają propagację. Filtr podejmuje decyzje dotyczące propagacji dla każdego komunikatu przechodzącego przez węzeł. Dotyczy to komunikatów, które pochodzą z innego miejsca w siatce odebranej przez węzeł, a także komunikatów utworzonych przez aplikację. Filtr ma dostęp zarówno do komunikatu, jak i jego źródła, więc decyzje dotyczące przekazywania lub porzucania wiadomości mogą być oparte na dostępnych pełnych informacjach.
PeerMessagePropagationFilter jest klasą abstrakcyjną podstawową z pojedynczą funkcją ShouldMessagePropagate. Pierwszy argument wywołania metody przekazuje pełną kopię komunikatu. Wszelkie zmiany wprowadzone w wiadomości nie mają wpływu na rzeczywisty komunikat. Ostatni argument wywołania metody identyfikuje źródło komunikatu (PeerMessageOrigination.Local lub PeerMessageOrigination.Remote). Konkretne implementacje tej metody muszą zwracać stałą z PeerMessagePropagation wyliczenia wskazującą, że komunikat ma być przekazywany do aplikacji lokalnej (Local), przekazywany do klientów zdalnych (Remote), obu (LocalAndRemote) lub żadnego (None). Ten filtr można zastosować, korzystając z odpowiedniego PeerNode obiektu i określając wystąpienie klasy filtru propagacji pochodnej PeerNode.MessagePropagationFilter we właściwości . Przed otwarciem kanału równorzędnego upewnij się, że filtr propagacji jest dołączony.
- Aby uzyskać fragmenty kodu i powiązane informacje, zobacz wpis Kanał równorzędny i MessagePropagationFilter na blogu dotyczącym kanału równorzędnego.
Kontaktowanie się z pojedynczym węzłem w siatce
Do poszczególnych węzłów w siatce można dotrzeć, ustawiając lokalny filtr lub nawiązując bezpośrednie połączenie.
Jeśli węzły w siatce mają indywidualny identyfikator, identyfikator docelowy można określić w implementacji komunikatu. Filtr lokalny można skonfigurować, pisząc funkcję w kontrakcie komunikatów, która będzie wyświetlać komunikat tylko w bieżącym węźle, jeśli jego identyfikator jest zgodny z określonym identyfikatorem docelowym. Sieć transportuje komunikat, więc obciążenie związane z konfigurowaniem nowego połączenia nie musi być ponoszone. Jednak istnieje utrata wydajności, ponieważ komunikat jest wysyłany wiele razy w całej siatki. Działa to dobrze w przypadku wysyłania komunikatów do poszczególnych członków siatki, o ile komunikaty nie są zbyt duże ani zbyt częste.
W przypadku długotrwałych połączeń o wysokiej przepustowości zaleca się bezpośrednie połączenia. Informacje o połączeniu można wysyłać za pośrednictwem siatki, a następnie skonfigurować bezpośrednie połączenie wybrane do wysyłania/odbierania komunikatów.
Wybieranie podejścia do ograniczania dystrybucji komunikatów
W przypadku odnajdywania scenariusza, w którym należy ograniczyć dystrybucję komunikatów, zadaj sobie następujące pytania:
Kto musi otrzymać wiadomość? Tylko jeden węzeł sąsiadujący? Czy węzeł znajduje się gdzieś indziej w sieci? Połowa siatki?
Jak często ta wiadomość zostanie wysłana?
Jaka będzie przepustowość używana przez ten komunikat?
Odpowiedzi na te pytania mogą pomóc w ustaleniu, czy należy użyć funkcji Liczba przeskoku, filtr propagacji komunikatów, filtr lokalny lub bezpośrednie połączenie. Zapoznaj się z następującymi ogólnymi wytycznymi:
Kto
Pojedynczy węzeł: filtr lokalny lub połączenie bezpośrednie.
Sąsiedzi w określonym sąsiedztwie: PeerHopCount.
Złożony podzbiór siatki: MessagePropagationFilter.
Jak często
Bardzo często: bezpośrednie połączenie, PeerHopCount, MessagePropagationFilter.
Od czasu do czasu: filtr lokalny.
Użycie przepustowości
Wysoki: Bezpośrednie połączenie; mniej zalecane jest użycie filtru MessagePropagationFilter lub filtru lokalnego.
Niski: Jakiekolwiek, bezpośrednie połączenie prawdopodobnie nie jest konieczne.