Skip to content
This repository was archived by the owner on Jun 14, 2022. It is now read-only.

Latest commit

ย 

History

History
43 lines (33 loc) ยท 2.67 KB

latency_simulation.md

File metadata and controls

43 lines (33 loc) ยท 2.67 KB

๋„คํŠธ์›Œํฌ ์ง€์—ฐ์‹œ๊ฐ„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

ํ’ˆ์งˆ์ด ์ข‹์ง€ ์•Š์€ ์‹ค์ œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๋ชจ์‚ฌํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ง€์—ฐ์‹œ๊ฐ„๊ณผ ํŒจํ‚ท ์†์‹ค ํ™•๋ฅ ์„ ์ง€์ •ํ•˜์—ฌ TCP์˜ head-of-line blocking ์ง€์—ฐ์‹œ๊ฐ„ ํŒจํ„ด์„ ํ‰๋‚ด๋‚ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„, ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ์˜ ํšŒ์„  ํŠน์„ฑ์„ ๊ฐ๊ฐ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํŒจํ‚ท์€ ๊ธฐ๋ณธ ์ง€์—ฐ์‹œ๊ฐ„๋งŒํผ ๋Šฆ์–ด์ ธ์„œ ์ „๋‹ฌ๋˜๋ฉฐ, ํŒจํ‚ท ์†์‹ค์ด ์ผ์–ด๋‚ฌ๋‹ค๊ณ  ํŒ์ •ํ•œ ๊ฒฝ์šฐ ๊ทธ ํŒจํ‚ท์ด ๊ธฐ๋ณธ ์ง€์—ฐ์‹œ๊ฐ„๋งŒํผ ์ถ”๊ฐ€๋กœ ๋Šฆ์–ด์ ธ์„œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ›„์† ํŒจํ‚ท์€ ๋Šฆ์–ด์ง„ ํŒจํ‚ท ์ดํ›„์— ๋ชฐ๋ ค์„œ ๋„์ฐฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ง€์—ฐ์‹œ๊ฐ„ 200ms, ์†์‹ค ํ™•๋ฅ  5%๋กœ ์„ค์ •ํ•˜๊ณ  ์‹คํ—˜ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

latency_simulation_graph.png

ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„ ์ „์†ก ๋ ˆ์ดํ„ด์‹œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

์„œ๋ฒ„์˜ ๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์„œ์—์„œ ์„ธ์…˜ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์ด BeginSimulatingReceiveLatency ํ˜ธ์ถœํ•ด์„œ ์„ธ์…˜ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ์‹ธ์„œ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

var actualHandler = new TestSessionHandler(param.SessionId);
return EngineAPI.Networking.BeginSimulatingReceiveLatency(actualHandler, TimeSpan.FromSeconds(0.2), 0.05);

๋‘๋ฒˆ์งธ ์ธ์ž๊ฐ€ baseDelay, ์„ธ๋ฒˆ์งธ ์ธ์ž๊ฐ€ lossRate์ž…๋‹ˆ๋‹ค. ๋ฆฌํ„ด๋˜๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์กฐ์ž‘ํ•ด์„œ ๋‚˜์ค‘์—๋„ baseDelay์™€ lossRate๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ ์ „์†ก ๋ ˆ์ดํ„ด์‹œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

์„œ๋ฒ„์˜ ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๋Š” ์‹œ์ , ํ˜น์€ ์•„๋ฌด ๋•Œ๋‚˜ ์•„๋ž˜ ์—”์ง„ API๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

EngineAPI.Networking.BeginSimulatingSendLatency(sessionId, TimeSpan.FromSeconds(0.2), 0.05);

๋‘๋ฒˆ์งธ ์ธ์ž๊ฐ€ baseDelay, ์„ธ๋ฒˆ์งธ ์ธ์ž๊ฐ€ lossRate์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•ด์„œ baseDelay์™€ lossRate๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณตํ†ต

๋ฏธ๋ฆฌ EngineAPI.Config.AllowLatencySimulation ์„ true๋กœ ์„ค์ •ํ•ด๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

false๋กœ ์„ค์ •ํ•ด๋‘๋ฉด new LatencySimulatingSessionHandlerFilter, BeginSimulatingSendLatency ํ˜ธ์ถœ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(์˜๋„์ž…๋‹ˆ๋‹ค).

์ ˆ๋Œ€๋กœ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ผœ์ง€๋Š” ์ผ์ด ์—†๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ์ •์ƒ์ ์œผ๋กœ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ์ด ๋‚˜์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  LatencySimulatingSessionHandlerFilter๋Š” ์„ธ์…˜ํ•ธ๋“ค๋Ÿฌ์™€ ๋ณ„๋„์˜ ํŒŒ์ด๋ฒ„์—์„œ ๋Œ๊ธฐ ๋•Œ๋ฌธ์—, ์˜ˆ์ƒ ๋ชปํ•œ ๋™์ž‘์ฐจ์ด๊ฐ€ ์žˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์—†์„ ๊ฑฐ๋ผ๊ณ  ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค๋งŒ ํ˜น์‹œ ๋ชจ๋ฅด๋‹ˆโ€ฆโ€ฆ. ๋”ฐ๋ผ์„œ LatencySimulatingSessionHandlerFilter ๋ฅผ ์ƒ์‹œ ์ผœ๋†“๊ณ  ๊ฐœ๋ฐœํ•˜์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ํ•„ํ„ฐ ๋ฒ—๊ฒผ๋‹ค๊ฐ€ ๋™์ž‘ ๋‹ฌ๋ผ์ง€๋ฉด ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์ด ๋งค์šฐ ๊ดด๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.