Skip to content

wlsdn2749/iocp-server-unity-client-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

C++ IOCP Server โ†” C# Unity Client Demo

์‹ค์ „ ์ˆ˜์ค€์˜ C++ ์„œ๋ฒ„- Unity ํด๋ผ์ด์–ธํŠธ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ์„œ๋ฒ„ ๋ฐ๋ชจ

** ํ•™์Šต์šฉ ์ตœ์†Œ ์˜ˆ์ œ๋ฅผ ๋„˜์–ด์„  ์‹ค์ „ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ**


ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ˆœํ•œ ํ•™์Šต์šฉ ์˜ˆ์ œ๋ฅผ ๋„˜์–ด์„  ์‹ค์ „ ์ˆ˜์ค€์˜ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ์„œ๋ฒ„ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์ฐจ๋ณ„ํ™” ํฌ์ธํŠธ

  • ์‹ค์ „ ์ˆ˜์ค€์˜ ํŒจํ‚ท ์‹œ์Šคํ…œ: Move/Chat Broadcasting, Player Management
  • C++/C# ์•„ํ‚คํ…์ฒ˜: C++ IOCP Server โ†” C# Unity Client ์™„๋ฒฝ ํ˜ธํ™˜
  • ์™„์ „ ์ž๋™ํ™”: ํŒจํ‚ท ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ, ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
  • ๐Ÿ†• ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง: TPS, ์ง€์—ฐ์‹œ๊ฐ„, ํŒจํ‚ท ์ฒ˜๋ฆฌ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ์ˆ˜์ง‘

๐Ÿ› ๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    Protobuf     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  C++ IOCP       โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ  โ”‚  C# Unity       โ”‚
โ”‚  Game Server    โ”‚   TCP Socket    โ”‚  Client         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ€ข Session Mgmt  โ”‚                 โ”‚ โ€ข NetworkManagerโ”‚
โ”‚ โ€ข Packet Mgmt   โ”‚                 โ”‚ โ€ข UI System     โ”‚
โ”‚ โ€ข Room System   โ”‚                 โ”‚ โ€ข Player Mgmt   โ”‚
โ”‚ โ€ข Memory Pool   โ”‚                 โ”‚ โ€ข Packet Queue  โ”‚
โ”‚ โ€ข ๐Ÿ“Š Stats Core โ”‚                 โ”‚ โ€ข ๐Ÿ“Š Stats Mgmt โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚                                   โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Google Test โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   ๐Ÿ“ˆ Performance Testing

๐Ÿš€ Quick Start

1. ๋นŒ๋“œ

Visual Studio ํŒŒ์ผ ๋นŒ๋“œํ›„

2. ๊ฐœ๋ณ„ ์‹คํ–‰

# ์„œ๋ฒ„ ์‹คํ–‰
cd iocp_server_cpp/Binary/Release/
GameServer.exe

# Unity ํด๋ผ์ด์–ธํŠธ ์‹คํ–‰
cd unity_client_csharp/Build/
Client.exe

# C# DummyClient ์‹คํ–‰
cd iocp_server_cpp/DummyClientCS/bin/Release/net9.0/
DummyClientCS.exe

๐ŸŽฎ ์ฃผ์š” ๊ธฐ๋Šฅ

์‹ค์‹œ๊ฐ„ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์‹œ์Šคํ…œ

  • โœ… User Registration: ํšŒ์›๊ฐ€์ž… ์‹œ์Šคํ…œ (์ด๋ฉ”์ผ/ํŒจ์Šค์›Œ๋“œ + Salt/Hash)
  • โœ… Login/Logout: ํ”Œ๋ ˆ์ด์–ด ์ธ์ฆ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ
  • โœ… Real-time Movement: ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ๋™๊ธฐํ™” (.gif ์ฐธ์กฐ)
  • โœ… Live Chat System: ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…
  • โœ… Player Count Display: ํ˜„์žฌ ์ ‘์†์ž ์ˆ˜ ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ

๐Ÿ†• ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

  • โœ… ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ํ†ต๊ณ„ ์ˆ˜์ง‘: TPS, ์ง€์—ฐ์‹œ๊ฐ„, ํŒจํ‚ท ์ฒ˜๋ฆฌ๋Ÿ‰
  • โœ… ์ž๋™ ํŒŒ์ผ ์ •๋ฆฌ: ํ…Œ์ŠคํŠธ ํ›„ ์š”์•ฝ ํŒŒ์ผ ์ƒ์„ฑ
  • โœ… ์‹ค์ œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ •: ๊ฐ€์ƒ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์•„๋‹Œ ์‹ค์ œ TCP/IP ํ†ต์‹ 

๐Ÿ“Š ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๊ฐ€์ด๋“œ: iocp_server_cpp/PerformanceTest/README.md | iocp_server_cpp/LoadTest/README.md

๐Ÿ› ๏ธ ์ž๋™ํ™” ๋„๊ตฌ ์‚ฌ์šฉ๋ฒ•

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” 3๊ฐ€์ง€ ํ•ต์‹ฌ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค:

๐Ÿ”„ ์™„์ „ ์ž๋™ํ™” ์‹œ์Šคํ…œ

  1. ๐Ÿ“ฆ Protobuf ํŒจํ‚ท ์ž๋™ํ™”: .proto โ†’ C++/C# ํŒจํ‚ท ํด๋ž˜์Šค ์ž๋™ ์ƒ์„ฑ
  2. ๐Ÿ—ƒ๏ธ DB ํ”„๋กœ์‹œ์ € ์ž๋™ํ™”: XML โ†’ C++ ORM ๋ฐ”์ธ๋”ฉ ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ
  3. ๐ŸŽจ Jinja2 ํ…œํ”Œ๋ฆฟ ์ž๋™ํ™”: ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ๋ฐ˜๋ณต ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ

๐Ÿ”„ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ

๐Ÿ“ฆ ํŒจํ‚ท ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ

flowchart TD
 subgraph Common\Protobuf\bin["Common\Protobuf\bin"]
    CPB_A[".proto ํŒŒ์ผ ์ˆ˜์ •"]
 end
 subgraph Visual_Studio["VS 2022"]
    VS_Build["ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ"]
    VS_PreBuild["ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์ „ ์ด๋ฒคํŠธ"]
    VS_CodeGen["์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ"]
    VS_Impl["์ปจํ…์ธ  ์ฝ”๋“œ ๊ตฌํ˜„"]
 end
 subgraph OS["Window"]
    OS_Batch["GenPackets.exe ์ž๋™ ์‹คํ–‰"]
 end
 subgraph PacketGenerator["PacketGenerator"]
    PG_Revise["PacketGenerator ์ˆ˜์ •"]
 end

    CPB_A --> VS_Build
    VS_Build --> VS_PreBuild
    VS_PreBuild --> OS_Batch
    OS_Batch --> VS_CodeGen
    VS_CodeGen --> VS_Impl
    PG_Revise -- MakeExe.bat ์‹คํ–‰ ํ›„, /Templates ํด๋”์™€ GenPackets.Exe๋ฅผ ๋ณต์‚ฌ --> CPB_A
Loading

๐Ÿ—ƒ๏ธ DB ORM + ํ”„๋กœ์‹œ์ € ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ

flowchart TD

    subgraph XML_Config["GameDB.xml"]
        XML_Define["DB Table or Column or Procedure์ •์˜"]
    end
    
    subgraph Python_Gen["ProcedureGenerator"]
        PY_Parse["XmlDBParser.py<br/>XML ํŒŒ์‹ฑ + Jinja2 ํ…œํ”Œ๋ฆฟ"]
        PY_Template["Templates/Procedure.h<br/>ORM ๋ฐ”์ธ๋”ฉ ์ฝ”๋“œ ์ƒ์„ฑ"]
    end

    subgraph CPP_Code["C++ GameServer"]
        CPP_Header["Genprocedures.h<br/>SP::Register ํด๋ž˜์Šค ์ž๋™ ์ƒ์„ฑ"]
        CPP_Usage["RegisterService.cpp<br/>accountRegister.ParamOut_AccId(accId)"]
    end
    
    XML_Define --> PY_Parse
    PY_Parse --> PY_Template
    PY_Template -- Templates/ ์™€ .exe ํŒŒ์ผ์„ Common/ProcedureGenerator๋กœ ์˜ฎ๊ธฐ๊ณ  ๋ฐฐ์น˜ํŒŒ์ผ ์‹คํ–‰ or ๋นŒ๋“œ--> CPP_Header
    CPP_Header --> CPP_Usage
Loading

๐ŸŽฏ ์ฃผ์š” ์ž๋™ํ™” ๊ธฐ๋Šฅ

์ž๋™ํ™” ์œ ํ˜• ์ž…๋ ฅ ์ถœ๋ ฅ ํ•ต์‹ฌ ๊ธฐ๋Šฅ
๐Ÿ“ฆ ํŒจํ‚ท .proto C++/C# ํด๋ž˜์Šค ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์ฝ”๋“œ
๐Ÿ—ƒ๏ธ DB XML + SQL C++ ORM ํด๋ž˜์Šค OUTPUT ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ
๐ŸŽจ ํ…œํ”Œ๋ฆฟ Jinja2 ๋ฐ˜๋ณต ์ฝ”๋“œ ์ฝ”๋“œ ์ƒ์„ฑ ์—”์ง„

๐Ÿ—ƒ๏ธ DB ์ž๋™ํ™” ๊ตฌํ˜„ ์˜ˆ์‹œ

1. XML ์„ค์ • (GameDB.xml)

<Procedure name="Register">
   <Param name="email" type="NVARCHAR(256)"/>
   <Param name="pwHash" type="VARBINARY(64)"/>  
   <Param name="pwSalt" type="VARBINARY(16)"/>
   <Param name="accId" type="INT" dir="out"/>
   <Param name="result" type="TINYINT" dir="out"/>
   <Body>
      <![CDATA[
       INSERT INTO [dbo].[Account] ([email], [pwHash], [pwSalt]) VALUES(@email, @pwHash, @pwSalt)
       SET @accId = SCOPE_IDENTITY();
       SET @result = 0;
      ]]>
   </Body>
</Procedure>

1.1 ์‹ค์ œ ์ƒ์„ฑ๋œ MS-SQL Stored Procedure

CREATE PROCEDURE [dbo].[spRegister] 	@email nvarchar(256) ,
	@pwHash varbinary(64) ,
	@pwSalt varbinary(16) ,
	@accId int  OUTPUT,
	@result tinyint  OUTPUT AS BEGIN 
       INSERT INTO [dbo].[Account] ([email], [pwHash], [pwSalt]) VALUES(@email, @pwHash, @pwSalt)
       SET @accId = SCOPE_IDENTITY();
       SET @result = 0;
       END

2. ์ž๋™ ์ƒ์„ฑ๋œ C++ ORM ํด๋ž˜์Šค

class Register : public DBBind<5, 0> {
public:
    void ParamIn_Email(const WCHAR* value, int32 len) { /*์ž๋™์ƒ์„ฑ*/ }
    void ParamIn_PwHash(BYTE* value, int32 len) { /*์ž๋™์ƒ์„ฑ*/ }
    void ParamIn_PwSalt(BYTE* value, int32 len) { /*์ž๋™์ƒ์„ฑ*/ }
    void ParamOut_AccId(int32& value) { /*OUTPUT ํŒŒ๋ผ๋ฏธํ„ฐ*/ }
    void ParamOut_Result(int8& value) { /*OUTPUT ํŒŒ๋ผ๋ฏธํ„ฐ*/ }
};

3. ์‹ค์ œ ์‚ฌ์šฉ ์ฝ”๋“œ

// RegisterService.cpp
SP::Register accountRegister(*conn);
accountRegister.ParamIn_Email(email.c_str(), email.size());
accountRegister.ParamIn_PwHash(pwHash.data(), 64);
accountRegister.ParamIn_PwSalt(salt.data(), 16);
accountRegister.ParamOut_AccId(accId);      // OUTPUT ํŒŒ๋ผ๋ฏธํ„ฐ
accountRegister.ParamOut_Result(result);    // OUTPUT ํŒŒ๋ผ๋ฏธํ„ฐ
bool success = accountRegister.Execute();   // SQLMoreResults() ์ž๋™ ํ˜ธ์ถœ

๐Ÿงช ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ & ์„ฑ๋Šฅ ๋ถ„์„

๐Ÿ“‚ LoadTest - ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ

cd iocp_server_cpp/LoadTest/scripts/
.\quick_test.bat              # 30์ดˆ ๋น ๋ฅธ ํ…Œ์ŠคํŠธ
.\gradual_load_test.bat       # ์ ์ง„์  ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ (1->5->10->...->30 ํด๋ผ์ด์–ธํŠธ)
.\prometheus_load_test.bat    # ๋Œ€๊ทœ๋ชจ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ (๊ธฐ๋ณธ๊ฐ’ 100๋ช… ํด๋ผ์ด์–ธํŠธ)
  • ๐ŸŽฏ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง: Prometheus + Grafana ๋Œ€์‹œ๋ณด๋“œ (http://localhost:3000)
  • ๐Ÿ“Š ์‹œ๊ฐ์  ๋ถ„์„: TPS, ์ง€์—ฐ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ์ถ”์ 
  • ๐Ÿ”„ ์ ์ง„์  ์ฆ๊ฐ€: ์„ฑ๋Šฅ ํ•œ๊ณ„์  ์ž๋™ ํƒ์ง€
  • โšก ๋Œ€๊ทœ๋ชจ ํ…Œ์ŠคํŠธ: prometheus_load_test.bat์œผ๋กœ 100๋ช… ๋™์‹œ ์ ‘์† ํ…Œ์ŠคํŠธ

๐Ÿ“‹ ์ƒ์„ธ ๊ฐ€์ด๋“œ: iocp_server_cpp/LoadTest/README.md

๐Ÿ“‚ PerformanceTest - ์‹ค์ œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ •

cd iocp_server_cpp/PerformanceTest/scripts/
.\build_and_test_real_network.bat
  • ๐ŸŒ ์‹ค์ œ TCP ํ†ต์‹ : GameServer.exe + DummyClientCS.exe ์‹ค์ œ ์‹คํ–‰
  • ๐Ÿ“ˆ ์„ฑ๋Šฅ ๋ฆฌํฌํŠธ: CSV/XML/JSON ํ˜•์‹ ์ž๋™ ์ƒ์„ฑ
  • ๐Ÿงช Google Test: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜
  • ๐Ÿ“Š ํ†ต๊ณ„ ์ˆ˜์ง‘: client_stats_*.json (gTest ํ™˜๊ฒฝ์—์„œ๋งŒ)

๐Ÿ“‹ ์ƒ์„ธ ๊ฐ€์ด๋“œ: iocp_server_cpp/PerformanceTest/README.md

๐ŸŽฎ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ๋น„๊ต

๊ตฌ๋ถ„ LoadTest PerformanceTest
๋ชฉ์  ์‹ค์‹œ๊ฐ„ ๋ถ€ํ•˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์ •ํ™•ํ•œ ์„ฑ๋Šฅ ์ธก์ •
๋ชจ๋‹ˆํ„ฐ๋ง Grafana ๋Œ€์‹œ๋ณด๋“œ ๋ฆฌํฌํŠธ ํŒŒ์ผ ์ƒ์„ฑ
ํด๋ผ์ด์–ธํŠธ ์ˆ˜ ์ ์ง„์  (1โ†’30) / ๋Œ€๊ทœ๋ชจ (100๋ช…) ๊ณ ์ • (์ฝ”๋“œ ์„ค์ •)
JSON ์ƒ์„ฑ โŒ ์ƒ์„ฑ ์•ˆ๋จ โœ… gTest ๋ชจ๋“œ์—์„œ๋งŒ
์‹คํ–‰ ์‹œ๊ฐ„ 5๋ถ„ (์ ์ง„์ ) / ๊ฐ€๋ณ€ (๋Œ€๊ทœ๋ชจ) 45์ดˆ (๊ณ ์ •)

๐Ÿ“š ํ•™์Šต ๊ธฐ๋ฐ˜

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” [Rookiss๋‹˜์˜ Inflearn ๊ฐ•์˜ ์‹œ๋ฆฌ์ฆˆ]๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ „ ์ˆ˜์ค€์œผ๋กœ ํ™•์žฅํ–ˆ์Šต๋‹ˆ๋‹ค:

๐ŸŽ“ ๊ฐ•์˜ vs ๋ณธ ํ”„๋กœ์ ํŠธ

๊ตฌ๋ถ„ ๊ธฐ์กด ๊ฐ•์˜ ๋ณธ ํ”„๋กœ์ ํŠธ
ํ†ต์‹  ๊ตฌ์กฐ C# โ†” C# ๋˜๋Š” C++ โ†” C++ C++ โ†” C# ํฌ๋กœ์Šค ํ”Œ๋žซํผ
ํŒจํ‚ท ์ข…๋ฅ˜ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์ œ ํŒจํ‚ท ์‹ค์ „ Move/Chat Broadcasting
์„ฑ๋Šฅ ์ธก์ • ์—†์Œ ๐Ÿ†• ์‹ค์‹œ๊ฐ„ ํ†ต๊ณ„ ์ˆ˜์ง‘ + Google Test
ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์ˆ˜๋™ ํ…Œ์ŠคํŠธ ๐Ÿ†• ์›ํด๋ฆญ ์™„์ „ ์ž๋™ํ™”
๋ณต์žก๋„ ํ•™์Šต์šฉ ์ตœ์†Œ ์˜ˆ์ œ ์‹ค์ „ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ
DB ๊ฐ„๋‹จํ•œ I/O Output ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ ๋” ๋ณต์žกํ•œ DB I/O ๊ฐ€๋Šฅ

๐Ÿงฉ ๊ธฐ์ˆ  ์Šคํƒ

Server (C++)

  • Windows / Visual Studio 2022 / WinSock2 IOCP
  • Google Protobuf 3.21.12
  • OpenSSL: SHA-512 ํŒจ์Šค์›Œ๋“œ ํ•ด์‹ฑ (Salt ๊ธฐ๋ฐ˜)
  • MSSQL Server

Client (C# Unity)

  • Unity 6000.1.7f1 / Google.Protobuf 3.21.12

Testing & Automation

  • Google Test 3.21.12 / ์‹ค์‹œ๊ฐ„ JSON ๋กœ๊น…
  • Python 3.10 (PacketGenerator) / CMake 3.20+
  • Prometheus + Grafana: ์‹ค์‹œ๊ฐ„ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง
  • Docker Compose**: ์›ํด๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง ํ™˜๊ฒฝ

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ & ๋‹ค์ด์–ด๊ทธ๋žจ

๐Ÿ“‚ ํด๋” ๊ตฌ์กฐ

iocp-server-unity-client-demo/
โ”œโ”€โ”€ ๐Ÿ“‚ iocp_server_cpp/          # C++ ์„œ๋ฒ„ & ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ LoadTest/             # ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ PerformanceTest/      # ์‹ค์ œ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ •
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ GameServer/           # ๋ฉ”์ธ ๊ฒŒ์ž„ ์„œ๋ฒ„
โ”‚   โ””โ”€โ”€ ๐Ÿ“‚ DummyClientCS/        # C# ํ…Œ์ŠคํŠธ ํด๋ผ์ด์–ธํŠธ
โ”œโ”€โ”€ ๐Ÿ“‚ unity_client_csharp/      # Unity ํด๋ผ์ด์–ธํŠธ
โ””โ”€โ”€ ๐Ÿ“‚ docs/diagram/             # ์‹œ์Šคํ…œ ๋‹ค์ด์–ด๊ทธ๋žจ
โ””โ”€โ”€ ๐Ÿ“‚ docs/troubleshooting/     # ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๊ธฐ๋ก
โ””โ”€โ”€ ๐Ÿ“‚ docs/ADR/                 # ์˜์‚ฌ ๊ฒฐ์ • ๊ธฐ๋ก

๐Ÿ“Š ์‹œ์Šคํ…œ ๋‹ค์ด์–ด๊ทธ๋žจ

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

์ด ํ”„๋กœ์ ํŠธ๋Š” ์‹ค์ „ ์ˆ˜์ค€์˜ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ•™์Šต์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ, ๊ธฐ๋Šฅ ์ œ์•ˆ, Pull Request ๋ชจ๋‘ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

๐Ÿ“„ ๋ผ์ด์„ผ์Šค

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ํ•™์Šต ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, Rookiss๋‹˜์˜ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿš€ ์‹ค์ „ ์ˆ˜์ค€์˜ ๊ฒŒ์ž„ ์„œ๋ฒ„๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”!

๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง: cd iocp_server_cpp/LoadTest/scripts/ && .\quick_test.bat
โšก ๋Œ€๊ทœ๋ชจ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ: cd iocp_server_cpp/LoadTest/scripts/ && .\prometheus_load_test.bat
๐Ÿงช ์„ฑ๋Šฅ ์ธก์ •: cd iocp_server_cpp/PerformanceTest/scripts/ && .\build_and_test_real_network.bat

๐Ÿ“‹ ์ž์„ธํ•œ ๊ฐ€์ด๋“œ: LoadTest | PerformanceTest | Diagrams

About

IOCP server and Unity Client Connections

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •