관리 메뉴

有希

Job Queue 본문

프로그래밍/C# 게임서버

Job Queue

有希. 2021. 9. 17. 21:13

5천명이 접속하면 5천개의 세션이 생긴다. 이를 한 곳에 몰아넣어 관리하면 편하므로 sessionManager를 하나 둔다. singleton패턴을 사용해 sessionManager를 만들어준다.

-> static으로 생성 후, 프로퍼티로 static생성Manager 반환해주기.

Dic으로 int(session번호로활용), session을 저장해 관리한다.

10명이 접속하여 10개의 세션이 있다고 가정했을때, A가 채팅을 치는 상황을 생각해보자

1. A가 채팅을 침, 서버로 메시지 전송

2. 서버에서 받고, 10명에게 다시 재전송

3. 10명(A포함)은 각각 메시지를 받아 출력한다.

여기서 알 수 있는 것은 1명이 메시지를 보내면 10번을 다시 서버에서 패킷을 보내야 한다는 것이다.

그러면 단톡방처럼 10명이 말하고 있는 상황이라면? 1번만 말해도 10 * 10 번의 패킷을 처리해야 한다.

즉, 서버가 처리해야 하는 작업량은 단순히 O(n^2)이 된다. 동접 500명인 게임이라고 생각하면...최소로만 잡아도 50000번의 패킷이 들어올 것이다.

이에 대응하는 방안으로는 같은 장소에 모이는 인원수를 제한하던가, 보낼 패킷을 모아 보내는 방안이 있다. 모아 보내는 방안은 List에 쌓아뒀다가 다 차면 보내던가 특정 시간마다 보내는 방안이 있는데, 다 차면 보내는 방법은 다 차지 않으면 전송이 되지 않는다. 두 가지를 혼합하면 된다.

다 차면 보내던가, 특정 Tick이 되면 다 차지 않아도 보내버리던가. 이는 System.Environment.TickCount를 이용할 수 있다.

'프로그래밍 > C# 게임서버' 카테고리의 다른 글

C# 서버와 유니티 연동(完)  (0) 2021.09.17
Packet Generator  (0) 2021.09.17
Packet Serialization  (0) 2021.09.17
RecvBuffer  (0) 2021.09.17
Connector  (0) 2021.09.17