2014-09-13 4 views
0

Java 소켓을 사용하는 경우 msg는 항상 버퍼 크기가 lenght입니까? (내가 300bytes만을 보낼 때 어쨌든 1024bytes 크기의 패키지를 보내고 있습니까?) 그리고 어떤 크기의 버퍼가 가장 좋은 옵션입니까? 512 바이트와 8 킬로바이트 사이의 차이점은 무엇입니까?Java. 항상 버퍼 크기로 전송됩니까?

소수의 스레드를 만들고 싶지 않으므로 여기에서 요청할 것입니다. 10-20 msg/s와 함께 100 connestions을 처리하기위한 java 표준 TCP serversocket 성능 충분합니까?

답변

1

대부분의 시스템의 MTU는 1500 바이트입니다. 즉, 이것의 배수를 보내면 패킷으로 분리됩니다. 이 값보다 작 으면 작은 패킷을 보내는 오버 헤드를 줄이기 위해 더 많은 데이터가 전송되는지 짧은 시간 동안 데이터를 보유 할 수 있습니다. 자세한 내용은 Nagle의 알고리즘을 참조하십시오.

운영 체제와 네트워크 어댑터가 기본적으로 일부 병합을 수행하므로 16 비트의 512 바이트 또는 8KB 모두를 한 번에 전송하는 것과 큰 차이가 없습니다.

정말 중요한 것은 당신과 다른 쪽 사이의 연결 대역폭입니다. 초당 최대 2000 개의 메시지가 있고 512 바이트 인 경우 10 Mbit/s 회선 (2000 * 512 * 8 = ~ 8 Mbit)이 필요합니다.

숫자와 관련해서는 문제가 없습니다 최대 약 10,000 연결 또는 초당 약 500,000 메시지. 1 기가비트/초 회선을 사용하면 쉽게 100 MB/s를 얻을 수 있습니다. 10 Gbit/s 회선을 사용하고 있다면 더 많은 것을 얻을 수 있지만주의하지 않는 한 모든 대역폭을 사용하는 데 어려움이있을 수 있습니다.

관련 문제