[완료]적절한 파일 전송 단위

klara의 이미지

요즘 간단한 HTTP용 서버 어플리케이션을 만들고 있습니다.

일단은 파일 전송등은 별 문제 없이 되고 있습니다.
다만, 큰 파일을 전송할 때는 적당히 버퍼를 비워주면서 파일을 보내지 않으면 그동안 계속 응답이 없게 되더군요.
그런데 어느정도 크기가 적당한지를 모르겠습니다.

작은 용량으로 쪼개면 버퍼를 자주 비우므로 전송속도가 느려지고, 큰 용량으로 커지면 느린 환경에서는 무응답 시간이 길어지고...
간단하게 몇번 테스트를 해보니, 256바이트씩 보낼때랑 1024바이트씩 보낼때랑 속도차이가 몇배는 차이가 나더군요.
적당한 버퍼 크기를 정하는 방법이 없을까요?

더불어, 이외에도 혹시 이런 서버만들때 필요한 사항에 대한 가이드라인 같은게 있다면 알려주시면 감사하겠습니다.

다즐링의 이미지

MTU 는 보통 1500인데 vpn과 여러환경을 감안하면 1440 정도가 안전하고 헤더가 20바이트니까 대충 계산이 나오죠.

PS :

헤더를 8바이트라고 적었는데 이것은 udp 입니다.
tcp 는 20바이트가 맞아요.

정줄놓고 글쓰고 잊었는데 갑자기 생각났습니다;

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링

klara의 이미지

네트워크 관련 프로그래밍은 이번에 처음해보는거라 MTU라는게 존재한다는걸 처음 알았습니다.
적당히 1메가정도로 해보아야 겠네요. 감사합니다.

haze11의 이미지

TCP가 하는 일을 어플에서 알지 않아도. 알아서 버퍼 비워주고 보내줄텐데요 =.=
어플에서는 잘 보냈는지만 처리해주면...

klara의 이미지

로우레벨로 하는게 아니라, Qt의 네트워크 모듈을 이용하고 있습니다.
어쩌면 Qt자체에서 내부 버퍼를 또 두고 있기 때문일지도 모르겠습니다만, Qt의 레퍼런스에는 '쓰기 버퍼는 크기를 제한하지 않는다'고 쓰여있고, 실제로 버퍼를 비우지 않고 쓰기만 계속 할경우 쓰기가 전부 끝난 다음에야 전송이 되더군요.