ํ ์คํธ ํด๋ผ์ด์ธํธ๋ ๋๊ฐ์ง ์ฉ๋๋ก ๋ง๋ญ๋๋ค.
์๋ฒ๋ฅผ ํ ์คํธํ ๋๋ง๋ค ๋งค๋ฒ ํด๋ผ์ด์ธํธ๋ฅผ ๋์ฐ๋ ค๋ฉด ๊ท์ฐฎ๊ณ ๋ฒ๊ฑฐ๋ก์ฐ๋ฏ๋ก, ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋ค๊ธฐ๋ฅผ ๊ถํฉ๋๋ค.
์ ๋ ํ ์คํธ์ ๋น์ทํ ๋๋์ผ๋ก, ์๋ฒ์ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ๊ณ , ์๋ฒ๊ฐ ๋ณด๋ธ ์๋ต์ ํ์ธํด์, ๊ธฐ๋ํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ ์๋ต์ด ๋์์๋ค๋ฉด ์๋ฌ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ์ฆ์ ์ข ๋ฃํ๋๋ก ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
์๋๋ ๋ง๋น๋ ธ๊ธฐ ๋์ผ์์ ๊ฐ์ ธ์จ ํ ์คํธ ์ผ์ด์ค๋ก, ์ ์ฒด 3000๋ผ์ธ์ฏค ๋๋ ํ ์คํธ ํด๋ผ์ด์ธํธ์ ์ผ๋ถ์ ๋๋ค. SetNameFirstTime์ด๋ผ๋ ํธ๋ค๋ฌ๋ฅผ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ ์คํธํ๋ ๊ฑธ ๋ณด์ค ์ ์์ต๋๋ค.
์ด ์์ ๋ ๋ฃจ์๋ก ๋์ด์์ง๋ง, ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๊ผญ ๋ฃจ์๋ก ์์ฑํด์ผ ํ ํ์๋ ์์ต๋๋ค. ๊ฒ์ ํด๋ผ์ด์ธํธ์ ๊ฐ์ ์ธ์ด๋ก ๋ง๋๋ ๊ฒ์ด ์ฌ๋ฌ ๋ชจ๋ก ํธํ ๊ฒ์ ๋๋ค.
์ฃผ์ํ ์ :
-
TOY ๋ก๊ทธ์ธ ๋ฑ ์ ๋ง ์ด์ฉ ์ ์๋ ํธ๋ค๋ฌ๋ฅผ ์ ์ธํ๋ฉด, ํ ์คํธ ํด๋ผ์ด์ธํธ๊ฐ ๋ชจ๋ ์๋ฒ ํธ๋ค๋ฌ๋ฅผ ์ต์ ํ ๋ฒ ์ด์์ ํธ์ถํ๋๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค.
-
์ฌ๋ฌ ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๋์์ ์คํํด๋ ์๋ก ๊ฐ์ญํ์ง ์๋๋ก ๋ง๋์ธ์. ๊ทธ๋ฌ์ง ์์ผ๋ฉด ๋ถํ ํ ์คํธ์ฉ์ผ๋ก ์์ ํ๋ ์์ ์ ํ ๋ ํฌ๊ฒ ์ฌ์์ ํด์ผ ํ ์ ์์ต๋๋ค. ์ ์ฒด ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์คํํ ๋๋ง๋ค ๊ณ์ ์ ์๋ก ๋ง๋ค๊ณ ๊ทธ ๊ณ์ ์์์๋ง ์์ ํ๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
-
์ ์ญ ๊ฒ์ ์๋ฒ ์ํ์ ์ํฅ์ ์ฃผ๊ฑฐ๋ ๋ฐ๋ ํ ์คํธ ์ผ์ด์ค๋ ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋์์ ์คํ๋๋ ํ ์คํธ ์๋๋ฆฌ์ค๋ค๋ผ๋ฆฌ ์๋ก ๊ฒฉ๋ฆฌ๊ฐ ๋๋๋ก ํ๋, ๋ง์ฝ ๊ฒฉ๋ฆฌํ๊ธฐ ์ด๋ ค์ธ ๊ฒฝ์ฐ ์ํฅ์ ๋ฐ๋ ์ชฝ์์ ์กฐ๊ฑด์ ํฌ๊ฒ ์ํํ๋ ์์ผ๋ก ๋์ฒํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ์ง ์์ผ๋ฉด ์ฌ๋ฌ ํ ์คํธ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ๋์ํ ๋ ํ ์คํธ๊ฐ ์คํจํ ์ ์์ต๋๋ค. ์ ์ฌํ๋์ง ์๋ ๋ฌธ์ ์ด๋ฏ๋ก ๋งค๋ฒ ์ ๊ฒฝ์ฐ๊ธฐ๋ ๋ฒ๊ฑฐ๋กญ๊ณ , ์ฅ๊ธฐ์ ์ผ๋ก๋ ํ ์คํธ ์คํจ์ ๋ํด ์ฌ๋๋ค์ด ๋๊ฐํด์ง๊ฒ ๋ฉ๋๋ค.
๊ธฐ๋ฅ ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค๊ฐ ๋ถํ ํ ์คํธ์ ์ฐ๋ฉด ํ ์คํธ ํด๋ผ์ด์ธํธ ์ฅ๋น ํ ๋์์ ์ถฉ๋ถํ ๋ง์ ๋ถํ๋ฅผ ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฝ๊ฐ ๊ณ ์ณ์ ํ๋ก์ธ์ค ํ๋์์ ๋งค์ฐ ๋ง์ ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๋์์ ๋๋ฆด ์ ์๋๋ก ๋ง๋ค๋ฉด ์ข์ต๋๋ค.
์ค๋ฒ๋ฐ์ธ ์๋ฒ ์์ง 2๋ฅผ ์ฌ์ฉํด์ C#์ผ๋ก ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋ค๊ณ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์๊ธธ ๊ถ์ฅํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์์ ์ ๋ฌดํ ๋ฐ๋ณตํ๋ ์ค๋ ๋๋ฅผ CPU ๊ฐ์ * 5 ์ ๋ ์คํฐํฉ๋๋ค(์ค๋ ๋๋ผ๋ฆฌ๋ ์ํธ์์ฉํ์ง ์์ต๋๋ค):
- ์ค๋ ๋๊ฐ ๊ฐ์ง ์ปค๋ฅ์ ํ์์ ๋ง์ง๋ง์ผ๋ก ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ๋๋ฆฐ ์ง ๊ฐ์ฅ ์๊ฐ์ด ๋ง์ด ํ๋ฅธ ์ปค๋ฅ์ ์ ๊บผ๋ ๋๋ค. ์ด๊ฒ์ C๋ผ๊ณ ํฉ์๋ค.
- C๊ฐ ์์ฑ๋ ์ง
$(SessionDuration)์ด ์ง๋ฌ์ผ๋ฉด ์ปค๋ฅ์ ์ ํ๊ธฐํฉ๋๋ค. - C๊ฐ ๋ง์ง๋ง์ผ๋ก ํ
์คํธ ์๋๋ฆฌ์ค๋ฅผ ๋๋ฆฐ ์ง
$(TestExecutionInterval)์ด ์ง๋์ง ์์์ผ๋ฉด C๋ฅผ ๋ค์ ํ๋ก ๋๋๋ ค๋ณด๋ด๊ณ , ์ ์ปค๋ฅ์ ์ ์์ฑํ๊ณ ์ด์ ๋ถํฐ ์ด๊ฒ์ C๋ผ๊ณ ๋ถ๋ฆ ์๋ค. - C๋ฅผ ๊ฐ์ง๊ณ ๊ธฐ๋ฅ ํ ์คํธ๋ฅผ 1ํ ์คํํฉ๋๋ค.
- C๋ฅผ ํ์ ๋๋๋ ค๋ณด๋ ๋๋ค.
- ํ์ ์๋ ๋ชจ๋ ์ปค๋ฅ์
๋ค์ ๋ํด PerformIO()๋ฅผ 1ํ์ฉ ๋ถ๋ฆ
๋๋ค.
$(SessionDuration)๊ณผ $(TestExecutionInterval)์ ์คํ๋์ค๋ ํ์ฌ ์์ง์์ ๋์์ผ๋ก ์ค์ํ๋ ์๊ท๋ชจ ํ
์คํธ์ ๋ก๊ทธ๋ฅผ ๋ถ์ํด์ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
-
$(SessionDuration): ์ธ์ ์ด ์๋ก ์์ฑ๋ ๋ค ๊ฒ์์ ์ข ๋ฃํ๊ธฐ๊น์ง ๊ฑธ๋ฆฐ ํ๊ท ์๊ฐ์ ๋๋ค(๋๋ ์๋ฌด ๋ํ๊ฐ์ด๋ ๊ด์ฐฎ์. ์ค๊ฐ๊ฐ์ด ์์ผ๋ฉด ๊ทธ๊ฒ๋ ๊ด์ฐฎ์).
โป ์๋๋ ๊ฐ ์ปค๋ฅ์ ์ด ์ ์ด๋$(SessionDuration)๋งํผ ์ธ์ ์ ๋ถ์ก๊ฒ ํ๊ธฐ ์ํจ์ ๋๋ค. -
$(TestExecutionInterval): ํ ์ธ์ ์ด ๋ณด๋ด๋ ์์ฒญ ์ฌ์ด์ ํ๊ท ๊ฐ๊ฒฉ์ด T์ด์ด๊ณ , ๊ธฐ๋ฅ ํ ์คํธ ํ ๋ฒ์ ์์ฒญ์ N๊ฐ ๋ณด๋ผ ๋,$(TestExecutionInterval)์ T * N ์ผ๋ก ์ ํ๋ฉด ๋ฉ๋๋ค.
Connection.NET์ ์ฌ์ฉํด์ ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง, ๊ถ์ฅํ์ง๋ ์์ต๋๋ค. Connection.NET(ํด๋ผ์ด์ธํธ์ฉ C# ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๊ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋ค๊ธฐ์ ํธ๋ฆฌํ๋๋ก ์ค๊ณํ๊ธฐ ๋๋ฌธ์, ํ ์คํธ ํด๋ผ์ด์ธํธ์๋ ์ ์ด์ธ๋ฆฌ์ง ์์ต๋๋ค. ๋งค ํ๋ ์ PerformIO๋ฅผ ํธ์ถํด์ผ ํ๊ณ , ๋ฐ์ ๋ฉ์์ง๊ฐ ๋งฅ๋ฝ ์์ด ์ฝ๋ฐฑ์ผ๋ก๋ง ๋์ฐฉํ๋ ์ , ๊ทธ๋ฆฌ๊ณ ๋ถํ ํ ์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๋๋ฆฌ๊ธฐ์ CPU ์ค๋ฒํค๋๊ฐ ๋๋ฌด ํฐ ๋ฌธ์ ๋ ์์ต๋๋ค.
๊ทธ๋์ ํ
์คํธ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋ค๊ธฐ ํธ๋ฆฌํ๋๋ก Connection.NET์ ๊ฐ์ผ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
EngineAPI.TestClient๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
EngineAPI.Networking.Listen ๊ณผ EngineAPI.Loop ์ฌ์ด์ ํ
์คํธ ํด๋ผ์ด์ธํธ ํ์ด๋ฒ๋ฅผ ์์ํ๋ ์ฝ๋๋ฅผ ๋ฃ์ผ์ธ์.
๋ค์ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
var arg = new ConnectionArgument();
arg.ServerEndpoint = "127.0.0.1:37773";
arg.GameName = "__SSE2_INTERNAL_NetworkingTest";
arg.CommunicationTimeoutMS = 1000;
arg.LoginParameters["TestCase"] = "LoginMePlease";
using (var con = await EngineAPI.TestClient.Connect(arg))
{
con.Send(Encoding.UTF8.GetBytes("๋ฉ์์ง1"));
con.Send(Encoding.UTF8.GetBytes("๋ฉ์์ง2"));
byte[] rcvd;
rcvd = await con.Receive(TimeSpan.FromSeconds(1));
Assert.Equal(Encoding.UTF8.GetString(rcvd), "๋ฉ์์ง1");
rcvd = await con.Receive(TimeSpan.FromSeconds(1));
Assert.Equal(Encoding.UTF8.GetString(rcvd), "๋ฉ์์ง2");
await AsyncAssert.MustThrow<TimeoutException>(async () =>
{
await con.Receive(TimeSpan.FromSeconds(0.1));
});
}์ด ์์ ์์๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์ ๋ UTF-8 ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ์ ์ง์ ์คํํ๊ณ ์์ง๋ง, ์ฌ๋ฌ๋ถ์ ํ ์คํธ ํด๋ผ์ด์ธํธ์์๋ ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ์ฐ๋๋ก Send์ Receive๋ฅผ ์ ์ ํ ๊ฐ์ธ์, ๋ค์๊ณผ ๊ฐ์ด ์ฐ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
Send(new SomeRequest(...));
var received = await Receive<SomeResponse>();์๋ต์ด SomeResponse๊ฐ ์๋๋ฉด ์๋ฌ๊ฐ ๋๊ฒ ํ๊ฑฐ๋, ๋ค๋ฅธ ๊ณณ์ ๋ฒํผ๋งํ๊ณ ์ํ๋ ์๋ต์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ํ ์๋ ์๊ฒ ์ฃ . ์์ฒญ๊ณผ ์๋ต์ ๋ฌถ๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ ํํ๋ ์ข์ต๋๋ค.
var resp = await Call(new SomeCall(...));