Peer Channel Chat
Chat 샘플은 피어 채널을 사용하여 다자간 채트 응용 프로그램을 구현하는 방법을 보여 줍니다. 채트 응용 프로그램 인스턴스가 보낸 메시지를 다른 모든 인스턴스가 받습니다.
Chat 샘플은 클라이언트 및 서비스 개념을 바탕으로 하지 않습니다. 진정한 피어-투-피어 응용 프로그램으로서 각 인스턴스가 다른 인스턴스의 피어 역할을 합니다. IChat
이중 계약을 사용하여 각 인스턴스가 다른 인스턴스에 메시지를 보내고 다른 인스턴스의 메시지를 받을 수 있습니다.
이 Chat 샘플은 Self-Host 샘플을 기반으로 합니다. 또한 WCF(Windows Communication Foundation)에 대한 고급 개요는 Getting Started 샘플을 참조하십시오.
참고
이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.
핵심 개념:
피어 채널은 WCF에서 제공되는 P2P(피어 투 피어) 다자간 통신 기술입니다. 피어 채널은 응용 프로그램 개발자에게 안전하고 확장 가능한 메시지 기반 P2P 통신 채널을 제공합니다. 피어 채널을 활용할 수 있는 다자간 응용 프로그램의 대표적인 예로 여러 사용자가 서버 없이 피어 투 피어 방식으로 서로 채트하는 대화방 같은 공동 작업 응용 프로그램을 들 수 있습니다. 피어 채널은 소비자 및 기업 시나리오 모두에서 P2P 공동 작업, 콘텐츠 배포, 부하 분산 및 분산 처리를 가능하게 합니다.
피어 채널에는 다음과 같은 새로운 개념이 도입되었습니다.
메시는 서로 통신하며 각자 고유한 메시 ID로 식별되는 피어 노드로 구성된, 이름이 지정된 컬렉션(상호 연결된 그래프)입니다.
참고
메시에 있는 활성 노드는 메시 이름을 게시하므로 다른 노드가 이 노드를 찾을 수 있습니다. 메시는 멤버 자격 변경에 따라 조정되고, 노드가 끊임없이 메시에 참가하고 떠나는 환경에서 유연한 연결성을 가지며, 트래픽 패턴에 따라 동적으로 최적화되는 특성을 갖습니다.
피어 노드는 메시에 있는 끝점입니다. 단일 응용 프로그램에 서로 다른 메시에 참여하는 여러 개의 피어 노드가 있을 수 있습니다.
피어 확인자는 메시 ID를 메시에 있는 노드의 끝점 주소로 확인합니다. 피어 노드는 이러한 주소를 사용하여 메시에 있는 다른 노드와 연결합니다. 이를 통해 메시지를 메시 전체에 전파할 수 있습니다.
채트는 콘솔 응용 프로그램입니다. 채트 응용 프로그램의 각 인스턴스는 동일한 끝점 주소를 사용하여 IDuplexChannel을 만듭니다. 따라서 패어 채널에서 채트 응용 프로그램의 한 인스턴스가 보낸 메시지는 나머지 모든 인스턴스에서 수신합니다. 모두 동일한 주소를 사용하기 때문입니다.
채트 응용 프로그램은 IChat
이중 계약을 정의하고 구현합니다. IChat
계약에서는 ServiceModel이 단일 요청 다중 응답 패러다임을 지원하지 않기 때문에 단방향 작업만 허용합니다. 다자간 채널의 경우 메시에 보내는 단일 요청이 여러 응답을 생성할 수 있습니다.
이 샘플은 IChat
이중 계약 및 구성 파일에 지정된 끝점을 사용하여 IClientChannel을 만들기 위해 정적 main 함수를 구현합니다.
한 인스턴스가 보낸 메시지를 다른 모든 인스턴스가 받을 수 있도록 모든 채트 인스턴스는 동일한 끝점 주소를 사용해야 합니다.
이 샘플의 채트 인스턴스는 사용자 지정 확인자를 사용하거나 기본 PNRP(피어 확인자)를 사용하여 서로를 찾습니다. Windows Server 2003에서는 PNRP를 사용할 수 없습니다. 따라서 Windows Server 2003을 실행하는 시스템에서 이 샘플을 실행하려면 사용자 지정 확인자를 사용해야 합니다. 기본적으로 이 샘플은 사용자 지정 확인자를 사용하도록 설정되어 있습니다. 사용자 지정 확인자 또는 기본 확인자 중 어느 것을 사용해야 하는지는 다음 구성 파일에 정의된 채트 끝점에 의해 결정됩니다. 기본 PNRP(피어 확인자)로 전환하려면 샘플 구성 파일의 bindingConfiguration에서 "BindingCustomResolver"를 "BindingDefault"로 바꿉니다.
<!-- chat instance participating in the mesh -->
<endpoint name="ChatEndpoint"
address="net.p2p://chatMesh/ServiceModelSamples/Chat"
binding="netPeerTcpBinding"
bindingConfiguration="BindingCustomResolver"
contract="Microsoft.ServiceModel.Samples.IChat">
</endpoint>
피어 노드가 Peer Channel Custom Peer Resolver 서비스와 통신할 수 있도록 Peer Channel Custom Peer Resolver의 클라이언트 쪽 구성이 구성 파일에 정의됩니다.
<!-- Client used to communicate with the custom resolver service. -->
<client>
<endpoint configurationName="CustomPeerResolverEndpoint"
address="net.tcp://localhost/ServiceModelsamples/peerResolverService"
binding="netTcpBinding"
bindingConfiguration="Binding3"
contract="Microsoft.ServiceModel.SamplesICustomPeerResolver">
</endpoint>
</client>
주소는 확인자 서비스의 주소를 식별합니다. 확인자 서비스가 원격 컴퓨터에서 실행되는 경우에는 localhost
를 정규화된 도메인 이름으로 바꾸십시오.
이 샘플에서는 IClientChannel로부터 피어 노드를 검색하고 IOnlineStatus를 사용하여 온라인 및 오프라인 이벤트를 등록하는 방법도 보여 줍니다. 온라인 이벤트는 피어 노드가 메시에 있는 하나 이상의 다른 피어 노드에 연결될 때 시작됩니다. 오프라인 이벤트는 피어 노드가 메시에서 더 이상 다른 피어 노드와 연결되어 있지 않을 때 시작됩니다.
현재는 피어 채널이 서비스 메타데이터 유틸리티(Svcutil.exe)와 통합되어 있지 않기 때문에 메타데이터를 생성할 수 없습니다.
샘플을 실행할 때 채트 인스턴스가 보낸 채트 메시지는 다른 채트 인스턴스의 콘솔 창에 표시됩니다. 각 콘솔 창에서 Q 키를 누른 다음 Enter 키를 누르면 인스턴스가 닫힙니다.
참고
현재는 샘플이 인프라에서 throw될 수 있는 모든 가능한 예외를 처리하지는 못합니다. 상용 또는 프로덕션 환경에서 이 샘플을 사용하는 경우 올바른 예외 처리 모범 사례를 따르십시오.
샘플을 설치, 빌드 및 실행하려면
Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.
C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.
단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.
또한 Chat 샘플에 다음 단계가 적용됩니다. Chat 샘플에는 클라이언트 및 서비스의 개념이 없으므로 3단계에서 클라이언트 및 서비스를 참조할 때마다 샘플의 개별 인스턴스에 이 단계가 적용됩니다.
bindingConfiguration이 BindingDefault로 설정되는 경우 사용 중인 모든 컴퓨터에서 PNRP가 설치되었고 사용 가능한지 확인합니다. bindingConfiguration이 BindingCustomResolver로 설정된 경우 Chat 프로젝트/솔루션 디렉터리의 Chat\<language>\CustomerResolver\bin 디렉터리에 있는 사용자 지정 확인자 서비스를 사용 중인 모든 시스템에서 시작해야 합니다.
응용 프로그램의 인스턴스를 원하는 수만큼 시작합니다. 우선 특정 클라이언트 인스턴스에서 보내는 메시지를 구분해 주는 별명을 입력합니다. 이 이름을 입력한 후에 바로 채트 메시지를 메시에 보낼 수 있습니다. 이 메시지는 고유한 멤버 이름과 함께 나머지 모든 인스턴스에 표시되어야 합니다. 즉 동일한 이름의 클라이언트가 보낸 메시지는 표시되지 않으며, 단일 클라이언트의 자체 메시지는 콘솔에 표시되지 않습니다.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.