ํ์ง์ด ์ข์ง ์์ ์ค์ ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ชจ์ฌํ์ฌ ํ ์คํธํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ์ง์ฐ์๊ฐ๊ณผ ํจํท ์์ค ํ๋ฅ ์ ์ง์ ํ์ฌ TCP์ head-of-line blocking ์ง์ฐ์๊ฐ ํจํด์ ํ๋ด๋ด๋ฉฐ, ํด๋ผ์ด์ธํธ โ ์๋ฒ, ์๋ฒ โ ํด๋ผ์ด์ธํธ์ ํ์ ํน์ฑ์ ๊ฐ๊ฐ ์ง์ ํ ์ ์์ต๋๋ค.
๋ชจ๋ ํจํท์ ๊ธฐ๋ณธ ์ง์ฐ์๊ฐ๋งํผ ๋ฆ์ด์ ธ์ ์ ๋ฌ๋๋ฉฐ, ํจํท ์์ค์ด ์ผ์ด๋ฌ๋ค๊ณ ํ์ ํ ๊ฒฝ์ฐ ๊ทธ ํจํท์ด ๊ธฐ๋ณธ ์ง์ฐ์๊ฐ๋งํผ ์ถ๊ฐ๋ก ๋ฆ์ด์ ธ์ ์ ๋ฌ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ ํจํท์ ๋ฆ์ด์ง ํจํท ์ดํ์ ๋ชฐ๋ ค์ ๋์ฐฉํ๊ฒ ๋ฉ๋๋ค.
์ง์ฐ์๊ฐ 200ms, ์์ค ํ๋ฅ 5%๋ก ์ค์ ํ๊ณ ์คํํ ์์ ๋๋ค.
์๋ฒ์ ๋ก๊ทธ์ธ ํ๋ก์ธ์์์ ์ธ์ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ ๋, ์๋์ ๊ฐ์ด 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 ๋ฅผ ์์ ์ผ๋๊ณ ๊ฐ๋ฐํ์๋ฉด ์๋ฉ๋๋ค.
๋์ค์ ํํฐ ๋ฒ๊ฒผ๋ค๊ฐ ๋์ ๋ฌ๋ผ์ง๋ฉด ํธ๋ฌ๋ธ์ํ
์ด ๋งค์ฐ ๊ดด๋ก์ธ ๊ฒ์
๋๋ค.
