Microsoft MVP성태의 닷넷 이야기
웹 다운로드에 대한 고찰 [링크 복사], [링크+제목 복사],
조회: 9477
글쓴 사람
HuuuZen (hugh-zen at kakao.com)
홈페이지
첨부 파일
[Private.zip]    

웹에 업로드되어 있는 특정 미디어를 다운로드 받는 컴포넌트 구현 중에 미디어 파일이 너무 큰 경우에 나눠서 다운로드 받는 방법에 대해서 고민을 해보고 있습니다.
HTTP header에 Content-Range 헤더 값을 이용하면 (만약 서버측에서 지원을 해준다면) 전체 사이즈를 알 수 있고 해당 C# HttpWebRequest의 AddRange 함수를 통해서 특정 부분만을 서버측으로 요청해서 받을 수 있다고 판단하여 충분히 나눠 받는게 빠를 거라고 생각했는데 실제 구현해보니 sigle task 기반의 내용이 더 빠르네요;;

좀 당황했습니다.

10기가가 넘어가는 웹 압축 파일로도 테스트를 해봤는데 결과는 sigledownloader.cs 내용의 코드가 빨랐습니다.

여러개의 Task에서 Header Range로 파트를 구분해서 HttpClient 여러개로 다운로드 받는다고 하더라도 실제 TCP 소켓은 하나로 처리되는 걸까요?








[최초 등록일: ]
[최종 수정일: 3/7/2023]


비밀번호

댓글 작성자
 



2023-03-07 05시07분
다운로드 시 서버 또는 클라이언트 측의 네트워크 용량을 모두 소비하지는 않나요? 동일하게 소비하는 상황이라면 단일 연결이 빠를 것입니다.

예를 들어, CPU 1개에 100% 소비하는 스레드를 1개로 작업하는 것과, 동일하게 무한루프를 도는 스레드를 2개로 작업하는 것은, 첫 번째가 더 빠른 것과 같습니다.

아마도, 네트워크 용량을 모두 소비하지 않는다면 나눈 경우가 더 빠를 것입니다.

---------------------

대개의 경우, 서버 측의 네트워크 용량이 부족할 것입니다. 가령 torrent 같은 경우 이런 문제를 다중 peer로부터 파일을 분할해서 받기 때문에 더 빠르게 동작합니다. torrent도 단일 peer로부터 받는 경우라면 마찬가지로 느릴 것입니다.
정성태
2023-03-07 06시04분
[HuuuZen] 서버측의 네트워크 용량의 문제일 수 있겠는데.. 결국 클라이언트에서 WebClient를 다중으로 만들어 여러 Task에서 수행을 하더라도 결국 서버측 ip와 port는 (http or https 프로토콜에 대한 포트는 고정) 하나 이기 때문에 C# instance만 여러 개일 뿐이지 결국 클라이언트 socket은 하나이고 해당 Window size에 따라서 서버측에서 Send 해주는거 아닌가요? ...
[guest]
2023-03-07 06시31분
소켓이 하나만 생성되는지 확인해보면 되지 않을까요. 어떻게 확인할 수 있을까요? ^^
정성태
2023-03-08 09시24분
[HuuuZen] netstat 툴로 pid 찍어서 확인해보니 클라이언트에 만들어진 소켓은 다르네요.. 클라이언트 쪽 IP는 같으나 PORT가 다르니...
착각을 좀 했네요.. 그렇다면 말씀하신 네트워크 용량은 송신측의 SOCKET Window size가 아닌 네트워크 bandwidth를 이야기 하시는 걸까요?
[guest]
2023-03-08 09시26분
넵, 아마 그렇지 않을까 싶습니다. 테스트를 하고 계시니 원인을 가장 잘 파악하실 수 있을 것입니다.
정성태

... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
1528김개똥2/14/201516719좀 관련없는 질문이지만, 정말 답답하고 찾는데 명확한 해답 찾지못해 질문 올립니다. <Windows 사용자 인증> [1]
1527방문자1/27/201518111System Timer의 Tick에서 Backgroundworker를 호출하면 스레드 문제가 있을까요? [1]
1526황상대1/26/201520245C# 마샬링 관련 질문이 있습니다. [1]
1525Ji-y...1/19/201518856시작하세요 C# 프로그래밍 도서에 관한 질문입니다. [1]
1523임종복12/31/201426791windows 2008 r2에서 ms-sql 2008 서버사용시 tls문제점 [3]
1524임종복1/4/201521313    답변글 [답변]: windows 2008 r2에서 ms-sql 2008 서버사용시 tls문제점 [2]
1521윤대욱12/19/201418018C++ 에서 서버와 클라이언트를 나누어서 구조체 전달에 대해서 궁금합니다. [1]파일 다운로드1
152012/10/201418648datetime관련해서요 [1]
1516aTo12/1/201417719wpf 배포관련. [3]
1514얄미운제리11/17/201418546[C# Mono]Mono Chart 개발 문의드립니다. [1]
1355미나리나물11/13/201415996RDP 접속 방식 질문드리고 싶습니다. [1]
1353송용국11/10/201415193TeamFoundationServer 에 소스를 Target서버로 옮기는(내려주는) 방법 있나요? [1]
1351blue...11/7/201420549c# webbrowser 모바일환경 접속 [1]
1350에메11/7/201420379WCF namedpipe 퍼블리싱 충돌 문제 [3]파일 다운로드1
1349Chun...11/6/201424515Microsoft. Net Framework 액세스 거부 오류...... [2]
1348김준석11/6/201420694 Mini dump 기록 안되는 현상 [2]파일 다운로드1
1346개미11/5/201435171https페이지에서 http서버에 있는 이미지 파일 호출시 보안 오류 [8]
1345장구니11/4/201418926AWS 인스턴스를 만들었는데 [1]
1343h11/2/201418573안녕하세요 [1]
1342왕초보11/1/201423421C#에서의 함수포인터 [13]
1347왕초보11/5/201418142    답변글 [답변]: C#에서의 함수포인터 [1]
1341영택10/29/201419309MFC Amazon S3 사용관련하여 질문드립니다. [2]
1344영택11/4/201415865    답변글 [답변]: MFC Amazon S3 사용관련하여 질문드립니다. [2]
1340감사합니다10/28/201420480c# wpf shdocvw internet explorer를 윈도우프레임으로 집어 넣을 수 있는지 궁금합니다. [3]파일 다운로드1
1338헬프미10/28/201421199tcp 소켓의 SYN_RECV 상태에 대하여 질문있습니다. [3]
1336이소정10/27/201416568filestream seek에 대해 질문있습니다. [1]
... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...