2015-01-16 2 views
3

내가되는 바인딩 클라이언트 (> 100) 많은 연결 및 수신 할 수있다 Net.TCP와 호스팅 WCF 서비스를 다양한 방송 메시지. 동일한 메시지가 모든 클라이언트에게 보내지고 현재 내가 현재하고있는 방법은 새로운 메시지에 대한 BlockingCollection을 기다리는 전용 스레드를 갖는 것입니다. 그리고 새 메시지가 도착하면 클라이언트 콜백 연결 목록을 반복하여 메소드는 메시지를 인수로받습니다.WCF Net.TCP은 : 많은 클라이언트에 메시지를 방송하는 가장 효율적인 방법은

그래서 내 코드는 현재 다음과 같습니다

var msg = ... get message from queue ... 
foreach(var client in clients) 
    client.SendMessage(message) 

이 디자인 다음과 같은 문제가 있습니다

  1. 클라이언트 새 메시지를받을 수 없습니다 내가 모든 클라이언트에 메시지를 보내 끝났어 때까지
  2. 느린 클라이언트를 감지하여 연결을 끊으려고합니다.
  3. 메시지가 클라이언트를 여러 번 직렬화하고 있습니다 (변경할 수 있음). 그래서 내가 그것을 보내기 전에 메시지를 serialize하지만 SendMessage (byte [] content)로 SendMessage의 signatore를 변경해야 할 것이고 이것은 내가하고 싶지 않은 것이다)

그런 문제들? 모든 팁/트릭/힌트?

+0

NetTCPBinding에 이미 가입 했습니까? 웹 서버 (요청, 응답, 닫기 연결)처럼 동작하는 BasicHTTPBinding 또는 NetHTTPBinding과 같은 것을 선택하면 영구 연결에 잠겨 있지 않으므로 동시에 수백 개의 동시 연결을 허용합니다. 그러나 이것은 각 클라이언트 컴퓨터에 데몬 프로그램을 설치하고 주기적으로 호스트에 들어가 대기열에서 아웃 바운드 공지 사항을 확인하는 것을 의미합니다. – Brian

+0

각 클라이언트가 주기적으로 서비스를 폴링하도록 제안하는 중입니다. IMHO 데이터가 도착하면 클라이언트가 데이터를 푸시하는 것이 훨씬 효율적이지 않습니다. 또한 클라이언트에게 최신 데이터가 있어야 폴링 간격이 매우 작아야하며 모든 리소스를 더 많이 소비하게됩니다. –

+0

WCF에서 HTTP와 비슷한 프로토콜을 사용하면 클라이언트를 폴링하는 클라이언트가 올바른 것입니다. 각 클라이언트 컴퓨터에 상주 공지를 듣는 프로그램이 있습니까? I – Brian

답변

1

전용 통신 대신 멀티 캐스트를 사용해야하는 것 같습니다. 따라서 각각의 새로운 클라이언트는 캐스트 채널에 참여해야하며 (자세한 내용은 IGMP를 참조하십시오) 게시 할 메시지 당 서버가 한 번씩 화재 및 잊어 버릴 것입니다.

+0

다른 기술로 전환 하시겠습니까? 내 질문은 - WCF로 효율적 일 수 있습니까? 아마도 WCF는 내가 찾고있는 것을 제공 할 수 없지만 WCF로 효율적으로 작업하게하는 방법을 누군가가 가지고 있는지 알고 싶습니다. –

+1

UDP 전송을 사용하여 멀티 캐스팅 응용 프로그램 만들기 : "WCF는 이제 UdpBinding을 사용하여 멀티 캐스팅 응용 프로그램을 작성하는 것을 지원합니다.이 전송은 여러 클라이언트에 동시에 작은 메시지를 보내야하는 상황에서 유용합니다." http://msdn.microsoft.com/en-us/library/hh556229(v=vs.110).aspx –

+0

이 문제를 조사하겠습니다. 감사합니다. –

관련 문제