Limitation de la distribution des messages

Le canal Peer est de par sa conception un maillage de diffusion. Son modèle d’inondation de base implique la distribution de chaque message envoyé par un membre d’un maillage à tous les autres membres de ce maillage. Cela est idéal dans les situations où chaque message généré par un membre est pertinent et utile pour tous les autres membres (par exemple, une salle de conversation). Toutefois, de nombreuses applications ont parfois besoin de limiter la distribution des messages. Par exemple, si un nouveau membre rejoint un réseau maillé et souhaite récupérer le dernier message envoyé via le réseau, cette requête n’a pas besoin d’être envoyée à chaque membre du réseau. La demande peut être limitée aux voisins proches, ou les messages générés localement peuvent être filtrés. Les messages peuvent également être envoyés à un nœud individuel sur le maillage. Cette rubrique traite de l’utilisation du nombre de tronçons, d’un filtre de propagation de messages, d’un filtre local ou d’une connexion directe pour contrôler la façon dont les messages sont transférés dans le maillage et fournit des instructions générales pour choisir une approche.

Nombres de sauts

Le concept de PeerHopCount TTL (Time-To-Live) est similaire à celui utilisé dans le protocole IP. La valeur d’un PeerHopCount message est liée à une instance de message et spécifie le nombre de fois où un message doit être transféré avant d’être supprimé. Chaque fois qu’un message est reçu par un client de Canal Pair-à-pair, le client examine le message pour voir si PeerHopCount est spécifié. S’il est spécifié, le client décrémente la valeur du nombre de tronçons par un avant de transférer le message aux nœuds voisins. Lorsqu'un client reçoit un message dont la valeur du nombre de sauts est égale à zéro, il le traite mais ne le transfère pas aux voisins.

Le nombre de sauts peut être ajouté à un message en ajoutant PeerHopCount en tant qu'attribut à la propriété ou au champ applicable dans l'implémentation de la classe de message. Vous pouvez définir cette valeur sur une valeur spécifique avant d’envoyer le message au maillage. De cette façon, vous pouvez utiliser le nombre de tronçons pour limiter la distribution des messages dans le maillage si nécessaire, ce qui évite potentiellement la duplication inutile des messages. Cela est utile dans les cas où la maille comprend un grand nombre de données redondantes ou pour envoyer un message aux voisins immédiats ou voisins se trouvant à quelques sauts.

Filtre de propagation de messages

MessagePropagationFilter peut être utilisé pour le contrôle personnalisé des inondations de messages, en particulier lorsque le contenu du message ou d’autres scénarios spécifiques déterminent la propagation. Le filtre prend des décisions de propagation pour chaque message qui passe par le nœud. Cela est vrai pour les messages provenant d’un autre emplacement dans le maillage reçu par votre nœud, ainsi que pour les messages créés par votre application. Le filtre a accès à la fois au message et à son origine, de sorte que les décisions relatives au transfert ou à la suppression du message peuvent être basées sur les informations complètes disponibles.

PeerMessagePropagationFilterest une classe abstraite de base avec une fonction unique. ShouldMessagePropagate Le premier argument de l’appel de méthode transmet une copie intégrale du message. Les modifications apportées au message n’affectent pas le message réel. Le dernier argument de l’appel de méthode identifie l’origine du message (PeerMessageOrigination.Local ou PeerMessageOrigination.Remote). Les implémentations concrètes de cette méthode doivent retourner une constante de l’énumération PeerMessagePropagation indiquant que le message doit être transféré à l’application locale (Local), transféré aux clients distants (), à la fois (RemoteLocalAndRemote) ou non ().None Ce filtre peut être appliqué en accédant à l’objet correspondant PeerNode et en spécifiant une instance de la classe de filtre de propagation dérivée dans la PeerNode.MessagePropagationFilter propriété. Assurez-vous que le filtre de propagation est joint avant d'ouvrir le canal homologue.

Contact d’un nœud individuel dans le maillage

Un nœud individuel dans un maillage peut être contacté en configurant un filtre local ou en configurant une connexion directe.

Si les nœuds d’un maillage ont chacun un ID individuel, un ID de destination peut être spécifié dans l’implémentation de votre message. Un filtre local peut être configuré en écrivant une fonction dans votre contrat de message qui affiche uniquement le message sur le nœud actuel si son ID correspond à l’ID de destination que vous avez spécifié. Le maillage transporte le message, de sorte que la surcharge de configuration d’une nouvelle connexion n’a pas besoin d’être engagée. Toutefois, il y a une perte d’efficacité, car le message est envoyé plusieurs fois dans le maillage. Cela fonctionne bien pour l’envoi de messages à des membres individuels d’un maillage tant que les messages ne sont ni trop volumineux ni trop fréquents.

Pour les connexions à bande passante élevée et durables, les connexions directes sont préférables. Vous pouvez envoyer des informations de connexion sur le maillage, puis configurer une connexion directe de votre choix pour envoyer/recevoir des messages.

Choix d’une approche pour limiter la distribution des messages

Lorsque vous découvrez un scénario dans lequel vous devez limiter la distribution des messages, posez-vous les questions suivantes :

  • Qui doit recevoir le message ? Un seul nœud voisin ? Un nœud ailleurs dans le maillage ? La moitié de la maille ?

  • À quelle fréquence ce message sera-t-il envoyé ?

  • Quel type de bande passante ce message utilisera-t-il ?

Les réponses à ces questions peuvent vous aider à déterminer s’il faut utiliser le compte de sauts, un filtre de propagation de message, un filtre local ou une connexion directe. Tenez compte des instructions générales suivantes :

  • Qui

    • Nœud individuel : filtre local ou connexion directe.

    • Voisins dans un certain voisinage : PeerHopCount.

    • Sous-ensemble complexe du maillage : MessagePropagationFilter.

  • Fréquence à laquelle

    • Très fréquent : connexion directe, PeerHopCount, MessagePropagationFilter.

    • Occasionnel : filtre local.

  • Utilisation de la bande passante

    • Élevé : Connexion directe, moins conseillée d’utiliser MessagePropagationFilter ou un filtre local.

    • Faible : Toute connexion directe n’est probablement pas nécessaire.

Voir aussi