본문 바로가기
c#_게임서버

mmorpg서버구조

by kcj3054 2022. 7. 6.

mmorpg 서버

  • 웹서버는 요청과 응답이 끝이지만 게임서버는 interaction이 정말 많다.. a가 b에게 공격을 가하면 a는 공격을하고 스태미너가 감소하던가 b의 체력도 감소하게된다 이러한 하나의 연결이 아닌 여러 상호작용들이 존재한다. !

  • single스레드를 사용하면 안되나? actor 수가 너무 많아지면 하나의 스레드로는 감당을 하지 못한다, 게임 유저들은 참지못한다.!

  • 그래서 사용한 것이 멀티스레딩 구조인데 이 상황에서는 문제가 많다. 중간에 queue로 범퍼 역할을 해도 lock lock을 거는데 여기서 성능도 문제가 되고, .. 그래서 가장 중요한 것이 구역을 잘 나누는 것이다. 구역을 잘 나누면된다.

  • 멀티프로세스는 어떨까 그렇게 되면 lock도 필요없고 동기화고 필요없고 그렇지만. 경계에서 만나는 지점이 문제가 생긴다 seamless 구조를 생각한다면 멀티프로세스로는 안된다. 하나의 프로세스는 하나의 스레드만 가지고있어서, 안된다.

seamless

  • 하나의 연결구조로 가면서 연결이 끊이지가 않는 상태이다 ( ex 대륙에서 다른 대륙으로 넘어갈 때 로딩이 있지만 심리스는 잠깐의 끊어짐도 존재하지않는다)

  • 연결이 끊이지않으면서, 액터도 많은 상태면 무조건 멀티스레드로 갈 수밖에 없다.

싱글프로세스 vs 멀티프로세스

  • 싱글프로세스는 프로세스가 하나다, 간단하게 게임서버가 하나라는 것이다..

  • 싱글프로세스는 scale up방식이다 머신을 더 좋은 것으로 교체, 프로세스가 하나가 돌기에 머신 성능이 올라가면 프로세스 성능도 올라가게된다., 그렇지만 공짜점심같은 scale up방식은 무조건 좋지 않다 컴터 성능 올라가는거에비해, 전체적인 성능이 비례적으로 좋아지는 것은 아니다.

  • scale out은 퍼뜨리는 것이다 서버 대수를 늘리는 것이다.!!! 경제적인 측면에서도 scale out이 좋다, 요즘 또 cloud 기술이 좋아져서 virtual machine들을 대여해서 사용하기도 한다.

  • 싱글프로세스의 단점은 spof이다, single point of failure 하나의 점이 망해가면 실패하는 것이다.

  • 싱글프로세스는 그래도 sealess가 가능하다, 하나의 프로세스가 모든 것을 관리해서 끊어짐이 없다.

  • 멀티프로세스는 sealess가 어렵지만 zone으로 나누면서 눈속임을 해야한다. 가장 쉬운 방법은 로딩을 해야한다, 걸어서 sealess하게 할려면 조금 복잡하다..

'c#_게임서버' 카테고리의 다른 글

zone  (0) 2022.07.13
서버 멀티스레드 버전  (0) 2022.07.09
spinlock, autoResetEvent, ReaderWriterLock  (0) 2022.07.02
lock  (0) 2022.06.30
소켓프로그래밍  (0) 2022.06.28