다음을 통해 공유


메시지 배포 제한

피어 채널은 기본적으로 브로드캐스트 메시로 설계되어 있습니다. 기본 홍수 모델은 메시의 모든 멤버가 보낸 각 메시지를 해당 메시의 다른 모든 멤버에게 배포하는 것을 포함합니다. 이는 멤버가 생성한 모든 메시지가 다른 모든 구성원(예: 채팅방)과 관련이 있고 유용한 경우에 이상적입니다. 그러나 많은 애플리케이션에서 메시지 배포를 제한해야 하는 경우도 있습니다. 예를 들어 새 멤버가 메시에 조인하고 메시를 통해 전송된 마지막 메시지를 검색하려는 경우 이 요청을 메시의 모든 멤버로 플러시할 필요가 없습니다. 요청은 인접한 지역으로 제한되거나 로컬로 생성된 메시지를 필터링할 수 있습니다. 메시의 개별 노드로 메시지를 보낼 수도 있습니다. 이 항목에서는 홉 수, 메시지 전파 필터, 로컬 필터 또는 직접 연결을 사용하여 메시 네트워크 전체에서 메시지를 전달하는 방법을 제어하고, 적절한 방법을 선택하는 일반적인 지침을 제시합니다.

홉 수

PeerHopCount 개념은 IP 프로토콜에 사용되는 TTL(시간To-Live)과 유사합니다. 값 PeerHopCount 은 메시지 인스턴스에 연결되며 삭제되기 전에 메시지를 전달해야 하는 횟수를 지정합니다. 피어 채널 클라이언트에서 메시지를 받을 때마다 클라이언트는 PeerHopCount이/가 지정되었는지 메시지를 검사합니다. 지정된 경우 클라이언트는 메시지를 인접 노드에 전달하기 전에 홉 수 값을 1씩 줄입니다. 클라이언트가 홉 수 값이 0인 메시지를 받으면 클라이언트는 메시지를 처리하지만 메시지를 인접한 항목으로 전달하지는 않습니다.

메시지 클래스 구현에서 해당 속성 또는 필드에 PeerHopCount를 특성으로 추가하여 메시지에 홉 수를 추가할 수 있습니다. 메시 네트워크에 메시지를 보내기 전에 이 값을 특정하게 설정할 수 있습니다. 이러한 방식으로 홉 수를 사용하여 필요한 경우 메시 전체의 메시지 배포를 제한하여 불필요한 메시지 중복을 방지할 수 있습니다. 이 기능은 메시에 많은 양의 중복 데이터가 포함되거나 몇 홉 내의 인접한 이웃 또는 인접한 사용자에게 메시지를 보내는 경우에 유용합니다.

메시지 전파 필터

MessagePropagationFilter 는 메시지 플러딩의 사용자 지정 제어에 사용할 수 있습니다. 특히 메시지의 콘텐츠 또는 다른 특정 시나리오에서 전파가 결정되는 경우 사용할 수 있습니다. 필터는 노드를 통과하는 모든 메시지에 대해 전파 결정을 내립니다. 이는 노드가 수신한 메시의 다른 위치에서 시작된 메시지와 애플리케이션에서 만든 메시지에도 적용됩니다. 필터는 메시지와 해당 원본 모두에 액세스할 수 있으므로 메시지 전달 또는 삭제에 대한 결정은 사용 가능한 전체 정보를 기반으로 할 수 있습니다.

PeerMessagePropagationFilter 는 단일 함수 ShouldMessagePropagate를 사용하는 기본 추상 클래스입니다. 메서드 호출의 첫 번째 인수는 메시지의 전체 복사본을 전달합니다. 메시지를 변경해도 실제 메시지에는 영향을 주지 않습니다. 메서드 호출의 마지막 인수는 메시지(PeerMessageOrigination.Local 또는 PeerMessageOrigination.Remote)의 원본을 식별합니다. 이 메서드의 구체적인 구현은 메시지가 로컬 애플리케이션(PeerMessagePropagation), 원격 클라이언트(Local), 둘 다(Remote), 또는 어느 쪽도 아닌 경우(LocalAndRemote)로 전달되어야 함을 나타내는 None 열거형에서 상수를 반환해야 합니다. 이 필터는 해당 PeerNode 객체에 접근하여 PeerNode.MessagePropagationFilter 속성에 파생 전파 필터 클래스의 인스턴스를 지정함으로써 적용할 수 있습니다. 피어 채널을 열기 전에 전파 필터가 연결되어 있는지 확인합니다.

메시의 개별 노드에 연락하기

네트워크의 개별 노드는 로컬 필터를 설정하거나 직접 연결을 설정하여 연락할 수 있습니다.

메시의 노드 각각에 개별 ID가 있는 경우 메시지 구현에서 대상 ID를 지정할 수 있습니다. 로컬 필터는 메시지 계약에서 해당 ID가 지정한 대상 ID와 일치하는 경우에만 현재 노드에 메시지를 표시하는 함수를 작성하여 설정할 수 있습니다. 메시는 메시지를 전송하므로 새 연결을 설정하는 오버헤드가 발생하지 않아도 됩니다. 그러나 메시지가 메시 전체에서 여러 번 전송되므로 효율성이 저하됩니다. 이 방법은 메시지가 너무 크거나 빈번하지 않는 한 메시의 개별 멤버에게 메시지를 보내는 데 적합합니다.

오래 지속되는 고대역폭 연결의 경우 직접 연결이 바람직합니다. 메시 네트워크를 통해 연결 정보를 보낸 다음, 선택한 메시지를 보내고 받기 위한 직접 연결을 설정할 수 있습니다.

메시지 배포를 제한하는 방법 선택

메시지 배포를 제한해야 하는 시나리오를 발견하면 다음 질문을 스스로에게 묻습니다.

  • 누가 메시지를 받아야 합니까? 하나의 인접 노드만 있나요? 메시의 다른 곳에 있는 노드인가요? 메시의 절반?

  • 이 메시지는 얼마나 자주 보내나요?

  • 이 메시지는 어떤 종류의 대역폭 을 사용하나요?

이러한 질문에 대한 답변은 홉 수, 메시지 전파 필터, 로컬 필터 또는 직접 연결을 사용할지 여부를 결정하는 데 도움이 될 수 있습니다. 다음 일반적인 지침을 고려합니다.

  • 누가

    • 개별 노드: 로컬 필터 또는 직접 연결입니다.

    • 특정 주변 내의 이웃 항목: PeerHopCount.

    • 메시의 복합 하위 집합: MessagePropagationFilter.

  • 빈도

    • 매우 자주: 직접 연결, PeerHopCount, MessagePropagationFilter.

    • 간헐적: 로컬 필터입니다.

  • 대역폭 사용

    • 높음: 직접 연결, MessagePropagationFilter 또는 로컬 필터를 사용하는 것은 권장되지 않습니다.

    • 낮음: 모든 직접 연결이 필요하지 않을 가능성이 있습니다.

참고하십시오