2012-08-29 5 views
3

이 주제를 게시 한 사람과 동일한 딜레마가 있습니다. 문제는 게임 프로그래밍에 관한 것이 아니라는 점을 제외하고는 Real-time communication with WCF 입니다. 두 Windows 응용 프로그램 (서버 - 클라이언트) 사이에서 실시간 통신이 가능하도록하는 가장 좋은 방법은 무엇인지 알고 싶습니다. 나는 시각적 인 C++/C#을 사용하여 현재까지 내 서버가 클라이언트에게받는 모든 피드를 실시간으로 표시 할 수 있기를 원합니다.실시간 통신

.NET 리모팅을 사용하기 시작했지만 계속적인 연구에서 SOAP-http를 사용하며 통신 속도에 영향을 줄 수 있습니다. 내 서버와 클라이언트는 인터넷을 사용하여 통신하고 .NET 리모팅은 방화벽이나 인터넷 사이에서 통신 할 때 TCP 채널 사용을 허용하지 않습니다.

귀하의 의견을 크게 환영합니다.

+0

나는이 주제에 대해서도 관심이있다. 어떤 기술을 발견하면 알려 주겠다. –

+2

Asp.Net과 websockets (VS2012는 .Net 4.5에 있음) 또는 signalr을 사용할 수있다. –

+0

tcp 소켓이 웹 소켓보다 빠르다는 것을 연구 할 수있었습니다. (제발 내가 틀렸다면 수정하십시오) 그래서 나는 TCP 채널을 사용하여 더 관심이 있습니다. 만약 당신이 나에게 그것을 할 수있는 방법에 대한 몇 가지 의견을 제공 할 수 있다면, 나는 정말로 감사 할 것입니다. 감사! :) – mauzinister

답변

2

당신이 "실시간"을 원한다면 UDP를 사용하는 것이 더 낳은 과정에서 일부 패키지를 잃고 싶다면 복구 할 때까지 화상 회의 도구를 사용하십시오 느린 패키지는 비디오 또는 오디오에서 다음 프레임을 이동하고 표시해야합니다. 이것은 UDP 사용에 대한 좋은 예입니다. 이것이 UDP가 TCP보다 훨씬 빠른 이유입니다.

그러나 메시지를 한 번 잃어 버리지 않으려면 TCP가 만들어졌습니다. 패키지를 잃어 버리면 프로토콜이 다시 완전한 메시지를 갖도록 요청할 것이기 때문입니다.

또한 커뮤니케이션이 유지되는 방식, 정보가 하나에서 많은 것, 많은 정보가 많은 정보, 여러 가지 정보가 하나의 정보로 전달 되는가에 달려 있습니다.

예를 들어 NetNamedPipeBinding을 사용하면 처리 속도는 훨씬 빠르지 만 프로세스 간 단일 시스템에만 배포됩니다. NetMsmqBinding은 대기열을 만드는 데 도움이되며로드가 많은 연결이되는 시나리오에서 놀랍도록 안정적이며 확장 가능합니다.

마지막으로 구체적인 에스코 나리오와 비즈니스 목표에 이르기까지 모든 것이 중요합니다.

당신이하여 TcpClient 및 TcpListener 클래스와 함께 표준 TCP 소켓을 사용할 수 있습니다, 당신은 당신의 자신의 메시지를 구문 분석을 수행하고자하는 경우가

0

을 도움이되기를 바랍니다. 데이터가 이미 직렬화 가능 객체 인 경우 텍스트 스트림으로 직렬화하여 소켓을 통해 보내고 클라이언트 측에서 직렬화 해제 할 수 있습니다.

인터넷을 통해 작동 시키려면 서버가 라우터에 포트를 전달해야하며 클라이언트는 서버의 공용 IP에 연결하면됩니다. 이 포트에 대해서도 방화벽에 예외를 추가해야합니다.

WCF 및 대용량 데이터의 가장 큰 문제점은 기본적으로 스트리밍을 설정하는 것이므로 WCF는 모든 것을 한 번에 보냅니다. 따라서 대용량 파일에는 적합하지 않습니다.