2011-12-17 2 views
2

UDP를 참조하십시오. 어떤 사람들은 예를 들어 클라이언트 하나당 단일 포트 (따라서 바운드 소켓)를 가지고 있다고 제안합니다. Quake III는 들어오는 스트림을 버퍼링하는 데 더 좋습니다. 나는 이것을 살 돈이 확실하지 않다.클라이언트 당 하나의 포트에 장단점이 있습니까?

결국 버퍼의 내용이 지속적으로 소모되는지 확인하기 위해 자신의 코드에 의존하지 않습니까? 내 서버에서이 작업을 1 초에 20-30 번 수행 할 계획이며 클라이언트가 동일한 속도로 패킷을 푸시하는 경우 버퍼링이 어떻게 문제가되는지 알 수 없습니다. FWIW, 내 패킷의 길이는 최대 1024 바이트입니다. 나는 4 명 또는 많아야 8 명의 클라이언트를 가질 것입니다. Windows에서 기본 버퍼 크기가 8k 인 여러 소스 (예 : this answer)를 알고 있습니다. 그래서 4 클라이언트와, 내 마음에 일반적으로 괜찮을 것입니다 ... 비록 내가 버퍼 크기를 다소 늘려야 할 수도 있습니다, 그리고 거기에 어떤 함정이 있는지 모르겠지만, 이것이 완료되었음을 알고 있겠지만 setsockopt()을 통해

답변

0

OS와 언어에서 버퍼링을 수행하는 코드는 포트에 관계없이 동일하므로 여러 소켓의 다중 버퍼 또는 한 소켓의 한 버퍼가 아무런 차이를 나타내지 않습니다. 한 포트의 한 소켓에 더 큰 (N 시간) 버퍼를 설정하면 N 포트의 N 버퍼와 같습니다.

만약 당신이 80s에서 계산기를 사용하지 않는다면 초당 8 * 30 패킷 (240 패킷/초)이라면 버퍼링 성능에 대해 걱정할 필요가 없다고 말하고 싶습니다.

송신 속도가 읽기 속도보다 높으면 버퍼의 용량에 관계없이 버퍼가 패킷을 채우고 드롭합니다. 버퍼의 크기는 대기 시간을 지정합니다.

N 클라이언트가 있고 모두 20/초 속도로 패킷을 보내는 경우 서버는 N * 20/초의 속도로 패킷을 읽어야하지만 실제로는 실제로 더 빨리 읽어야합니다 그보다는 기계의 타이밍 (시계)에 차이가있을 것이므로 특히 서버가로드를 보정해야하므로 서버가 최소값을 계산하는 것보다 자주 읽어야합니다. 그렇지 않으면 버퍼를 소모해야합니다. 초당 N 번 (그러나 대개 적절한 크기의 버퍼를 지정하는 한 자주 좋아한다).

또한 가끔 지연 패킷을 얻을 수 있기 때문에 경로를 따라 일부 라우터에서 하나 또는 두 개의 다른 사람과 일괄 처리 할 수 ​​있습니다. 버퍼 크기를 8k (2x 또는 3x)보다 약간 크게 설정하면 ' 한 클라이언트에서 일괄 처리 된 패킷 3 개를 얻습니다. 그 중 2 개는 오래된 것이고 다른 클라이언트에서는 새 패킷을 덮어 쓰며 읽거나 무시합니다.

관련 문제