Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El canal del mismo nivel es, por diseño, una malla de difusión. Su modelo básico de inundación implica distribuir cada mensaje enviado por cualquier miembro de una malla a todos los demás miembros de esa malla. Esto es ideal en situaciones en las que todos los mensajes generados por un miembro son relevantes y útiles para todos los demás miembros (por ejemplo, un salón de chat). Sin embargo, muchas aplicaciones tienen una necesidad ocasional de limitar la distribución de mensajes. Por ejemplo, si un nuevo miembro se une a una malla y desea recuperar el último mensaje enviado a través de la malla, esta solicitud no necesita inundarse a todos los miembros de la malla. La solicitud puede limitarse a vecinos cercanos o se pueden filtrar los mensajes generados localmente. Los mensajes también se pueden enviar a un nodo individual de la malla. En este tema se describe el uso del recuento de saltos, un filtro de propagación de mensajes, un filtro local o una conexión directa para controlar cómo se reenvieron los mensajes a lo largo de la malla y se proporcionan directrices generales para elegir un enfoque.
Números de saltos
El concepto de PeerHopCount
es similar al TTL (time-To-Live) usado en el protocolo IP. El valor de PeerHopCount
está asociado a una instancia de mensaje y especifica cuántas veces se debe reenviar un mensaje antes de ser descartado. Cada vez que un cliente de canal entre iguales recibe un mensaje, el cliente examina el mensaje para ver si PeerHopCount
se especifica. Si se especifica, el cliente disminuye el valor de recuento de saltos en uno antes de reenviar el mensaje a los nodos vecinos. Cuando un cliente recibe un mensaje con un valor de recuento de saltos de cero, el cliente procesa el mensaje, pero no reenvía el mensaje a los vecinos.
El número de saltos se puede agregar a un mensaje agregando PeerHopCount
como un atributo a la propiedad aplicable o campo en la implementación de la clase de mensaje. Puede establecerlo en un valor específico antes de enviar el mensaje a la malla. De esta manera, puede usar el recuento de saltos para limitar la distribución de mensajes a lo largo de la malla cuando sea necesario, lo que podría evitar la duplicación innecesaria de mensajes. Esto es útil en los casos en los que la malla contiene una gran cantidad de datos redundantes, o para enviar un mensaje a vecinos inmediatos, o vecinos dentro de unos pocos saltos.
- Para obtener fragmentos de código e información relacionada, consulte la entrada Atributo PeerHopCount: Controlar la Distribución de Mensajes en el blog de Peer Channel.
Filtro de propagación de mensajes
MessagePropagationFilter
se puede usar para el control personalizado de la inundación de mensajes, especialmente cuando el contenido del mensaje u otros escenarios específicos determinan la propagación. El filtro toma decisiones de propagación para cada mensaje que pasa por el nodo. Esto es cierto para los mensajes que se originaron en otra parte de la malla que el nodo ha recibido, así como los mensajes creados por la aplicación. El filtro tiene acceso tanto al mensaje como a su origen, por lo que las decisiones sobre el reenvío o la eliminación del mensaje se pueden basar en la información completa disponible.
PeerMessagePropagationFilter es una clase abstracta base con una sola función, ShouldMessagePropagate. El primer argumento de la llamada al método pasa una copia completa del mensaje. Los cambios realizados en el mensaje no afectan al mensaje real. El último argumento de la llamada al método identifica el origen del mensaje (PeerMessageOrigination.Local
o PeerMessageOrigination.Remote
). Las implementaciones concretas de este método deben devolver una constante de la enumeración PeerMessagePropagation que indique si el mensaje se debe reenviar a la aplicación local (Local
), a clientes remotos (Remote
), a ambos (LocalAndRemote
) o a ninguno (None
). Este filtro se puede aplicar accediendo al objeto correspondiente PeerNode
y especificando una instancia de la clase de filtro de propagación derivada en la PeerNode.MessagePropagationFilter
propiedad . Asegúrese de que el filtro de propagación está adjunto antes de abrir el canal del mismo nivel.
- Para obtener fragmentos de código e información relacionada, consulte la entrada Peer Channel y MessagePropagationFilter en el blog de Peer Channel.
Ponerse en contacto con un nodo individual en la malla
Se puede establecer contacto con un nodo individual de una malla mediante la configuración de un filtro local o mediante la configuración de una conexión directa.
Si los nodos de una malla tienen un identificador individual, se puede especificar un identificador de destino en la implementación del mensaje. Para configurar un filtro local, escriba una función en el contrato de mensaje que solo mostrará el mensaje al nodo actual si su identificador coincide con el identificador de destino especificado. La malla transporta el mensaje, por lo que no es necesario incurrir en la sobrecarga de configurar una nueva conexión. Sin embargo, hay una pérdida de eficacia, ya que el mensaje se envía muchas veces a lo largo de la malla. Esto funciona bien para enviar mensajes a miembros individuales de una malla siempre que los mensajes no sean demasiado grandes ni demasiado frecuentes.
Para las conexiones de ancho de banda de larga duración, es preferible establecer conexiones directas. Puede enviar información de conexión a través de la malla y, a continuación, configurar una conexión directa de su elección para enviar o recibir mensajes.
Elección de un enfoque para limitar la distribución de mensajes
Cuando descubra un escenario en el que necesita limitar la distribución de mensajes, haga las siguientes preguntas:
¿Quién necesita recibir el mensaje? ¿Solo un nodo vecino? ¿Un nodo en otro lugar de la malla? ¿La mitad de la malla?
¿Con qué frecuencia se enviará este mensaje?
¿Qué tipo de ancho de banda usará este mensaje?
Las respuestas a estas preguntas pueden ayudarle a determinar si usar el recuento de saltos, un filtro de propagación de mensajes, un filtro local o una conexión directa. Tenga en cuenta las siguientes directrices generales:
Quién
Nodo individual: filtro local o conexión directa.
Vecinos dentro de una zona determinada: PeerHopCount.
Subconjunto complejo de la malla: MessagePropagationFilter.
Frecuencia
Muy frecuente: conexión directa, PeerHopCount, MessagePropagationFilter.
Ocasional: filtro local.
Uso de ancho de banda
Alta: conexión directa, menos aconsejable usar MessagePropagationFilter o filtro local.
Bajo: cualquiera; la conexión directa probablemente no es necesaria.