내가되는 바인딩 클라이언트 (> 100) 많은 연결 및 수신 할 수있다 Net.TCP와 호스팅 WCF 서비스를 다양한 방송 메시지. 동일한 메시지가 모든 클라이언트에게 보내지고 현재 내가 현재하고있는 방법은 새로운 메시지에 대한 BlockingCollection을 기다리는 전용 스레드를 갖는 것입니다. 그리고 새 메시지가 도착하면 클라이언트 콜백 연결 목록을 반복하여 메소드는 메시지를 인수로받습니다.WCF Net.TCP은 : 많은 클라이언트에 메시지를 방송하는 가장 효율적인 방법은
그래서 내 코드는 현재 다음과 같습니다
var msg = ... get message from queue ...
foreach(var client in clients)
client.SendMessage(message)
이 디자인 다음과 같은 문제가 있습니다
을- 클라이언트 새 메시지를받을 수 없습니다 내가 모든 클라이언트에 메시지를 보내 끝났어 때까지
- 느린 클라이언트를 감지하여 연결을 끊으려고합니다.
- 메시지가 클라이언트를 여러 번 직렬화하고 있습니다 (변경할 수 있음). 그래서 내가 그것을 보내기 전에 메시지를 serialize하지만 SendMessage (byte [] content)로 SendMessage의 signatore를 변경해야 할 것이고 이것은 내가하고 싶지 않은 것이다)
그런 문제들? 모든 팁/트릭/힌트?
NetTCPBinding에 이미 가입 했습니까? 웹 서버 (요청, 응답, 닫기 연결)처럼 동작하는 BasicHTTPBinding 또는 NetHTTPBinding과 같은 것을 선택하면 영구 연결에 잠겨 있지 않으므로 동시에 수백 개의 동시 연결을 허용합니다. 그러나 이것은 각 클라이언트 컴퓨터에 데몬 프로그램을 설치하고 주기적으로 호스트에 들어가 대기열에서 아웃 바운드 공지 사항을 확인하는 것을 의미합니다. – Brian
각 클라이언트가 주기적으로 서비스를 폴링하도록 제안하는 중입니다. IMHO 데이터가 도착하면 클라이언트가 데이터를 푸시하는 것이 훨씬 효율적이지 않습니다. 또한 클라이언트에게 최신 데이터가 있어야 폴링 간격이 매우 작아야하며 모든 리소스를 더 많이 소비하게됩니다. –
WCF에서 HTTP와 비슷한 프로토콜을 사용하면 클라이언트를 폴링하는 클라이언트가 올바른 것입니다. 각 클라이언트 컴퓨터에 상주 공지를 듣는 프로그램이 있습니까? I – Brian