2010-06-10 7 views
0

서버에 여러 개의 실제 UDP 스트림을 처리해야하는 상황이 있습니다. 을 처리하기 위해 각 클라이언트에 대해 1) 서버에서 단일 포트에서 청취와 동일한 포트에서 모든 클라이언트에서 데이터를 수신하고 생성 스레드 :다중 UDP 포트

나는 (내가 생각하는)

싱글 소켓 두 가지 옵션이 있습니다 클라이언트가 보내는 것을 멈출 때까지 데이터. 여기에서는 데이터를 처리하는 데 사용되는 데이터 및 스레드 수를 받기 위해 하나의 포트만 사용됩니다.

복수 소켓 : 2) 클라이언트는 서버에서 열린 포트를 요청하여 데이터를 보내고 응용 프로그램은 클라이언트에 열린 포트를 보내고 포트에서 수신하여 데이터를 처리하는 새 스레드를 엽니 다. 여기 각 클라이언트는 데이터를 전송할 고유 한 포트를 갖게됩니다.

이미 UDP에서 어떤 클라이언트로부터 오는 패킷인지 알 수있는 방법을 구현했습니다.

나는받는 클라이언트가 초당 1000 개 이상의 클라이언트와 60KB입니다.

는 위의 방법

를 사용하여 성능 문제가 아니면 C에서 이러한 유형의 작업을 처리 할 수있는 효율적인 방법은 여기인가? 클라이언트 당 하나 개의 스레드를 가지고

감사합니다,

라구 많은 고객과

답변

0

은 컨텍스트 전환을 많이하고 많이 수행해야하기 때문에 매우 비효율적이다. 또한 IP 당 열 수있는 포트의 수는 제한되어 있습니다 (포트는 16 비트 숫자 임).

따라서 "단일 소켓"이 훨씬 효율적입니다. 그러나 비동기 API를 사용하여 단 하나의 스레드로 "Multipe Sokets"을 사용할 수도 있습니다. 패키지의 페이로드를 사용하여 클라이언트를 식별 할 수 있으면 클라이언트 당 포트를 가질 필요가 없습니다.

관련 문제