인프런 커뮤니티 질문&답변

dyl님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

JobQueue #2

심리스에 관하여..

23.01.05 23:57 작성

·

463

0

11:51 분

심리스관련해서 아이디어가 생각나서 혹시..

아이디어.1

(가정 : 몬스터라면 애초에 서버에서만 클라로 뿌려주면 되긴 하겠지만, 클라에서 몬스터 정보를 준다 가정할때..)

몬스터, 스킬, 유저, 모든 사물에 잡큐를 하나씩 배치를 해주어서 심리스를 해결한다고 했는데

즉 이 말은 동기화 되야 하는 데이터가 있을때 심리스라서 맵 단위로 잡큐가 존재 할수 없으니

예를 들자면 플레이어가 있고 플레이어 근방에, A 라는 몬스터가 있는데 이 몬스터의 동작을 그 주변에 있는

몬스터들도 알아야 하는 정보라 할때 몬스터의 정보(어떤 변경사항이 있고 다른 유저가 알아야 하는정보)를 서버에 보내고

플레이어 근방에 있는(대략 일정 변경의 반지름 또는 시야에 들어오는 공간분할 처리내에 있는 유저) 정도의 유저들(동기화 대상들)에게만

해당 몬스터 정보를 뿌려주어 해서 몬스터,사물 기반으로 데이터를 전송하는 방식일까요?




아이디어.2
(서버에서 처리 되는 기준)
서버기준으로 , 사물, 몬스터 등에 개별 잡큐가 존재

1. 몬스터가 왔다갔다 하는 동작이 몬스터 개별 잡큐에 넣기만 하고 실행 하진 않는다

2. 플레이어가 몬스터나 사물등 일정 거리 안의 시야뷰에 보인다면 해당 오브젝트 동기화 대상들간의 잡들을 실행 하면서 동기화 처리를 한다


용어는 들어 보긴 했는데 설명을 듣다가
갑자기 생각이 떠올라서 적어 봅니다

답변 1

2

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2023. 01. 06. 00:33

1. 1에서 말하는 방법이 Actor모델인데 사실 맵 단위 JobQueue 배치 방식으로도
심리스를 구현할 수는 있기는 합니다. (다만 적절한 락 등이 필요)
JobQueue의 핵심은 멀티쓰레드 환경에서 어떻게 득을 볼 수 있을지이며,
심리스 여부가 가장 중요한게 아닙니다.
큰 맵 하나에 JobQueue 1개만 있다면 사실 단일 쓰레드로만 실행이 될 것이고
아아아아아주 유닛이 많아지면 CPU 처리가 밀릴 수 있는게 문제입니다.
하지만 심리스 상황이 아니라도 어차피 단일 맵이 유저들이 몰리면 동일한 문제가 발생하고
그래서 RvR이 아주 어려운 것입니다. (물론 네트워크 부하는 덤)

2.
그럴 수는 없구요. AI 등은 플레이어와 무관하게 실행되어야 하는 Job들도 많기 때문입니다.

사실 이 부분은 아주 어려운 주제라서
컨텐츠만 작업하고 엔진 쪽 관심이 없는
대부분의 서버 프로그래머들도 잘 이해를 못합니다.
그리고 실제로 처리하는 방법도 다양한 종류의 문파(?)가 있구요.
늘 어떻게 구현하는게 좋을지 이런 저런 고민을 해보시기 바랍니다.

dyl님의 프로필 이미지

작성한 질문수

질문하기