2011-08-25 3 views
0

내 Winforms 클라이언트/서버 응용 프로그램은 UDP 멀티 캐스트를 사용하여 모든 클라이언트를 실시간으로 업데이트합니다. 서버는 알려진 UDP 싱크에 이벤트를 발생시키고 각 클라이언트는 System.Net.Sockets.UdpClient 클래스의 인스턴스를 사용하여 이벤트를 수신합니다.클라이언트/서버 이벤트 처리 : UdpClient 대안?

훌륭한 결과를 얻을 수 있습니다. 각 클라이언트에는 TCP를 통해 동기화 호출을하고 TCP가 비동기 작업을 처리하는 원격 객체가 있으므로 클라이언트는 상태 비 저장됩니다. 그러나 우리 고객의 대부분은 UDP를 여러 가지 방법으로 비활성화했습니다. 일부는 멀티 캐스팅을 비활성화하고, 일부는 UDP를 비활성화하고, 일부는 의도적으로 비활성화하고, 다른 일부는 우발적으로 비활성화합니다. 내가 원하는 것보다 더 많은 네트워크 관리를 끝내게된다.

다른 선택은 서버가 클라이언트 연결을 관리하고 TCP를 통해 이벤트를 보내는 것입니다. 그러나 이것은 상태 유지 서버가 필요하며 매우 매력적이지 않습니다. 우수한 대안이 있습니까?

답변

0

WCF 및 게시/가입 디자인 패턴을 사용해 볼 수 있습니다. 클라이언트가 서버를 찾으면 netTCP 바인딩과 UDP 브로드 캐스트를 사용하여 WCF에 설명 된 것처럼 winforms TCP/UDP 응용 프로그램을 옮겼습니다. 찾으면 클라이언트가 구독하고 WCF 콜백 계약을 사용하여 클라이언트를 업데이트합니다. 연결이 끊어지면 양쪽에 지능이 있어야합니다.

또한 서버가 항상 WCF 콜백이 설정된 주소 인 경우 UDP를 사용하여 서버를 찾을 필요가 없으므로 UDP를 제거하고 netTCPBinding을 사용하여 메시지를 클라이언트 및 기타 서버로 푸시 할 수 있습니다. 그 반대.