다음을 통해 공유


메시지 분포 제한

피어 채널은 디자인상 브로드캐스트 메시입니다. 피어 채널의 기본 플러딩 모델에는 메시의 임의 멤버가 보낸 각 메시지를 해당 메시의 다른 모든 멤버에 배포하는 작업이 포함됩니다. 이는 멤버가 생성한 모든 메시지가 관련성을 지니며 다른 모든 멤버에 유용한 경우(예: 채트 방) 이상적입니다. 그러나 많은 애플리케이션에서 메시지 배포를 제한해야 하는 경우가 발생합니다. 예를 들어 새 멤버가 메시에 참가하여 메시를 통해 전송된 마지막 메시지를 검색하려고 할 경우 이 요청을 메시의 모든 멤버에 플러딩하지 않아도 됩니다. 요청은 인접한 지역으로 제한되거나 로컬로 생성된 메시지를 필터링할 수 있습니다. 메시의 개별 노드로 메시지를 보낼 수도 있습니다. 이 항목에서는 홉 수, 메시지 전파 필터, 로컬 필터 또는 직접 연결을 사용하여 전체 메시에서 메시지가 전달되는 방법에 대해 설명하고 접근 방식을 선택하기 위한 일반적인 지침을 제공합니다.

홉 수

PeerHopCount의 개념은 IP 프로토콜에 사용되는 TTL(Time-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 또는 로컬 필터는 덜 권장됨)

    • 저대역폭: 모두(대부분의 경우 직접 연결은 필요하지 않음)

참고 항목