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

딩동댕님의 프로필 이미지

작성한 질문수

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

매치메이킹 질문

작성

·

312

0

멀티 달리기 게임이 있다고 했을때 매치메이킹을 해서 서로 경주하는 게임을 이 서버 강의를 응용해서 만들려고 하는데요

그래서 제가 생각해본결과 서버 포트를 여러개 열어서 매치메이킹된 유저끼리 그 포트를 연결해 게임을 진행시킬려고 하는 방법이 떠올랐어요

포트를 여러개 열어서 사용하는 방법이 안좋은 방법인거 같긴한데, 포트를 여러개 열면 문제되는 문제점이 무엇인가요?

답변 3

1

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

포트를 여러개 연다고 딱히 문제될 부분은 없습니다.
여기서 굉장히 중요한 사실은 P2P로 가는지 CS로 가는지인데요.

매치메이킹 서버로 매치된 유저끼리 게임을 진행시킨다고 해도, 아주 많이 다른 2가지 방법이 있습니다.
서버의 도움 없이 정말 해당 유저들의 IP를 서로 알려주고
자기들끼리만 게임을 진행시키는 것이 P2P 방식입니다.

P2P의 경우 한 명이 서버의 역할을, 나머지 애들이 클라의 역할을 맡게 되는데
문제가 생각보다 단순하지 않습니다.
왜냐하면 서버가 공인 주소(Public IP)를 갖고 대기를 하는 상황이 아니라서
나머지 클라들이 쉽게 접근할 수 없게 됩니다.
홀펀칭(Hole Punching) 관련 검색해보면 더 자세히 알 수 있는데
여튼 골치 아프고 더럽고 어려운 주제입니다.
스타1을 해보셨다면 가끔 방에 안 들어가지고 뭐 그런 이슈들이 많은데
스타1은 P2P게임이기 때문입니다.
P2P의 또 다른 문제는 해킹에 취약하다는 점인데요.
그래서 요즘은 대부분 CS 모델로 갑니다.

CS(Client-Server) 모델로 간다면,
[매치메이킹 서버]와 [게임 서버 N개]를 띄워서 계속 통신을 합니다.
매치메이킹 서버로 매치된 유저들한테 접속할 게임 서버의 주소/포트를 알려주고
그쪽에 접속을 시킨 다음에 모든 유저가 접속하면 게임을 시작하는 것이죠.
LOL을 생각하시면 됩니다.

결과적으로 MMO가 아닌 다른 장르도 그 나름의 고충이 있으며
LOL/배그처럼 아주 많은 동접자가 몰리고 또 많은 방을 파야 하는 게임은
그 자체도 정말 골치 아픈 일들이 많습니다.

 

 

0

딩동댕님의 프로필 이미지
딩동댕
질문자

답변 감사합니다.

0

딩동댕님의 프로필 이미지
딩동댕
질문자

[게임 서버 N개]라는 것이 동일한 아이피에서 포트만 달라도 한서버로 보는 것이죠?

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

포트는 그냥 내부적으로 패킷 목적지
구별용일 뿐 포트를 굳이 다르게 할 이유는 없습니다.
그리고 게임 서버 N개라 함은 정말 물리적으로 컴퓨터 N개에서 띄우는 것을 얘기합니다.
서버 프로그램 1개당 게임 1개를 관제할 수도 있고,
경우에 따라 1개의 서버에서 다수의 게임을 관제할 수도 있습니다.