IOCP ๋ชจ๋ธ ๊ธฐ๋ฐ ๋ฉํฐ์ค๋ ๋ ์ฑํ ์๋ฒ
- IOCP ๋ชจ๋ธ ๊ธฐ๋ฐ ๋ฉํฐ์ค๋ ๋ ์์ผ ์๋ฒ
- Windows Socket API ์ฌ์ฉ
- RingBuffer๋ฅผ ์ฌ์ฉํ I/O ์ต์ ํ
- Redis ์ฐ๋
hiredis,redis_client๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
- C++
- Windows Socket API
- Visual Studio 2022
- Redis
์ ์ ์ ์์ฒญ์ด ์๋๋ผ Connect, Disconnect์์ ์๋ฒ๊ฐ ์์ฑํ๋ ํจํท.
System Packet Queue์ Enqueue๋์ด ์ฒ๋ฆฌ๋๋ค.
sequenceDiagram
Note over Client,Server:Connect
Server-)Server:kSYS_USER_CONNECT
Note over Server:์ ์ ๋ฐ์ดํฐ ์ด๊ธฐํ
sequenceDiagram
Note over Client,Server:Disconnect
Server-)Server:kSYS_USER_DISCONNECT
alt ์ ์ ๊ฐ ๋ฃธ์ ์๋ ๊ฒฝ์ฐ
Server--)Client:kROOM_LEAVE_USER_NOTIFY<br>(๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ํด์ฅ ์๋ฆผ)
Note over Server:๋ฃธ์์ ์ ์ ๋ฐ์ดํฐ ์ญ์
end
์ ์ ์ ์์ฒญ์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋๋ ํจํท.
User Packet Queue์ Enqueue๋์ด ์ฒ๋ฆฌ๋๋ค.
sequenceDiagram
Client-)Server:kLOGIN_REQUEST
Note over Server: ํ์ฌ ์ ์ ์ ์ ์ ์ฒดํฌ
alt ์ต๋ ์ธ์ ๋๋ฌ
Server--)Client:kLOGIN_RESPONSE(์คํจ)
end
Note over Server: ์ด๋ฏธ ์ ์ํ ์ ์ ์ธ์ง ๊ฒ์ฆ
alt ์ด๋ฏธ ์ ์ํ ์ ์
Server--)Client:kLOGIN_RESPONSE(์คํจ)
end
Server-)Redis: kREQUEST_LOGIN
Note over Redis:์ ์ ๋ก๊ทธ์ธ ์ ๋ณด ๊ฒ์ฆ
Redis--)Server: kRESPONSE_LOGIN
Server--)Client: kLOGIN_RESPONSE
sequenceDiagram
Client-)Server:kROOM_ENTER_REQUEST
Note over Server: ๋ก๊ทธ์ธ ํ<br>๋ก๋น์ ์๋ ์ ์ ์ธ์ง ๊ฒ์ฆ
alt ๋ก๋น์ ์์ง ์์
Server--)Client:kROOM_ENTER_RESPONSE(์คํจ)
else ๋ก๋น์ ์์
Note over Server: ๋ฐฉ ์
์ฅ ์ฒ๋ฆฌ
Server--)Client:[๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ Broadcast]<br>kROOM_NEW_USER_NOTIFY
Server--)Client:kROOM_USER_LIST_NOTIFY
Server--)Client:kROOM_ENTER_RESPONSE
end
sequenceDiagram
Client-)Server:kROOM_LEAVE_REQUEST
Note over Server: ๋ฐฉ ์
์ฅ ์ํ์ธ์ง ๊ฒ์ฆ
alt ๋ฐฉ ์
์ฅ ์ํ๊ฐ ์๋
Server--)Client:kROOM_LEAVE_RESPONSE(์คํจ)
else ๋ฐฉ ์
์ฅ ์ํ
Note over Server: ๋ฐฉ ํด์ฅ ์ฒ๋ฆฌ
Server--)Client:[๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ Broadcast]<br>kROOM_LEAVE_USER_NOTIFY
Server--)Client:kROOM_LEAVE_RESPONSE
end
sequenceDiagram
Client-)Server:kROOM_CHAT_REQUEST
Note over Server: ๋ฐฉ ์
์ฅ ์ํ์ธ์ง ๊ฒ์ฆ
alt ๋ฐฉ ์
์ฅ ์ํ๊ฐ ์๋๊ฑฐ๋<br>์ ํจํ์ง ์์ ๋ฐฉ ๋ฒํธ
Server--)Client:kROOM_CHAT_RESPONSE(์คํจ)
else ๋ฐฉ ์
์ฅ ์ํ
Server--)Client:[๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ Broadcast]<br>kROOM_CHAT_NOTIFY
Server--)Client:kROOM_CHAT_RESPONSE
end
