[UE] 언리얼 엔진에서 http를 통해 파일을 다운로드 받을 때 속도가 느린 문제
언리얼 프로젝트에서 http를 통해서 조금 큰 파일(약1GB)을 다운로드 받게되는 상황이 있었는데 속도가 느려도 너무 느린 문제가 발생했다.
일단 테스트한 코드는 아래에서 참고를 했다.
https://ballbot.tistory.com/22
[UE4] HTTP 통신으로 파일 다운로드
언리얼 엔진으로 VR 리듬게임 프로젝트를 진행하고 있다. 리듬 게임에서 중요한건 당연 음악인데, 인게임에 음악은 동적으로 추가되고 제거되어야 한다. (음악 파일 을 추가할때마다 업데이트를
ballbot.tistory.com
다른점이라면 로그가 아닌 위젯으로 현재상황을 보여준다 정도로 다른것은 없다.
다운받는 영상을 보면...
무려 11분이라는 어마어마한 시간이 걸린다.
(아니 FHttpRequestProgressDelegate에서 int32이라 총 용량이 아래와 다르다.. -_- 일단 속도를 중점으로 보자)
아니 원래 느린거 아닌가? 할수도 있지만..
크롬에서는 약 4분.
curl 명령어를 통해서는 1분 후반대가 나왔다..
이건 뭔가 문제가 있는거라고 생각이 든다.
조금 차이나는것도 아니고 몇배는 차이가 발생하니까.
`Stat HTTPThread` 를 통해서 보면 Sleep에 많이 걸린게 눈으로도 보인다.
뭔가 옵션이 있겠지 하고 찾아본 결과 아래의 링크를 찾을 수 있었다.
[HTTP] Why is HTTP GET so slow, UE4 is performing 15x slower than Python at downloading a file
The only note on it is that it isn’t affecting anything bad enough to be critical. There is a plan to look at it whenever they can get to it, though.
forums.unrealengine.com
[Networking]
UseLibCurl=False
이라던가...
[HTTP.Curl]
BufferSize=524288
등등 버퍼사이즈를 조절하는 방법이 소개 되었지만 내가 선택한 방법은 nullbus라는 유저의 답글이었다.
Http Request의 fetch rate는 FHttpModule에 의해서 제어 되고있고
HttpThreadActiveFrameTimeInSeconds변수가 핵심이며 기본값이 약 0.005(200Hz)인데 이거를 적절하게 조절하면 합리적인 다운로드 속도를 얻을 수 있고 엔진 구성 파일에서 이 값을 제어 할 수 있다.
[HTTP]
HttpThreadActiveFrameTimeInSeconds=0.00001
이 글을 보고 위와같이 DefaultEngin.ini파일의 맨 아래에 추가했다.
결과는 아주 놀라웠고 영상을 통해서 보자.
CallCount가 이전과는 달리 아주 많이 올라가는것이 인상적이다.
걸린시간은 약 1분이고 기본적으로 값이 저렇게 된것이 뭔가 http통해서 큰 파일은 받지 않겠지? 라는것이 대부분이라 저렇게 세팅된거같다는 생각이 든다.