뒤끝매치 구조

매치 서버 구조

매치 서버 구조

매치 서버에 접속한 클라이언트는 위의 그림과 같이 유저가 원하는 매치타입으로 매칭을 신청할 수 있습니다.
각 매치타입 별로 서버는 나뉘어 있지 않고 동일한 서버에서 매칭을 수행합니다.

매치 서버에서의 모든 응답은 SDK에서 이벤트 형태로 클라이언트에 반환합니다.

인게임 서버 구조

인게임 서버 구조

매치서버에서 매칭에 성공하면 실시간 게임을 위한 인게임 서버 주소와 매칭된 유저들만 접속할 수 있는 룸토큰을 발급해줍니다.
해당 정보를 이용하여 인게임 서버에 접속하여 실시간으로 게임을 진행할 수 있습니다.

인게임 서버에서의 모든 응답은 SDK에서 이벤트 형태로 클라이언트에 반환합니다.

1. 인게임 서버 접속하기

매칭에 성공한 클라이언트는 인게임 서버에 접속할 수 있습니다.
매칭에 성공하지 못한 클라이언트가 인게임 서버에 접속을 시도하면 서버에서 접속을 거부합니다.

2. 인게임 룸에 입장하기

매칭에 성공하여 인게임에 접속한 클라이언트는 룸토큰을 이용하여 매칭이 성사된 클라이언트끼리 게임을 할 수 있는 룸에 입장할 수 있습니다.
본인이 매칭된 룸이 아닌 다른 룸에 입장을 시도하면 서버에서 입장을 거부합니다. 본인이 매칭된 룸에만 접속할 수 있습니다.

  • 모든 유저가 접속한 룸은 최대 1시간동안 활성화 됩니다.
  • 1시간이 지난 룸은 자동으로 파기되고, 게임결과는 무효처리 됩니다.

3. 게임시작

매칭된 모든 클라이언트가 룸에 입장하면 약 15초 후 서버에서 게임시작 메시지를 모든 클라이언트에게 송신합니다.
매칭된 모든 클라이언트가 1분 이내에 룸에 입장하지 않으면 해당 룸은 파기됩니다.

4. 게임진행

같은 룸에 접속하고 있는 클라이언트 각각은 연결되어 있지 않지만, 위의 그림과 같이 인게임 서버를 중심으로 연결되어 있습니다.
클라이언트가 서버로 보낸 메시지는 서버에서 브로드캐스팅을 수행하여 같은 룸에 존재하는 모든 클라이언트에게 데이터를 전송합니다.

  • 인게임 서버는 단순히 클라이언트들이 데이터를 주고받기 위한 릴레이 서버의 역활을 수행합니다. 서버에서는 게임 로직에 어떤 관여도 하지 않습니다.
  • 특정 클라이언트가 다른 특정 클라이언트에게만 데이터를 전송할 수 없습니다.

5. 결과종합

게임이 끝난 뒤 각 클라이언트가 게임 결과를 서버로 전송하면 서버에서는 이를 종합하여 결과를 도출합니다.
결과값이 잘못되었을 시 에러 이벤트가 호출됩니다.

모든 클라이언트가 결과를 보낸 경우에만 결과가 종합됩니다.

* 재접속 기능

클라이언트와 서버가 접속이 끊어진 경우 재접속이 가능합니다.

재접속이 가능한 상태

  • 통신 상태 불량 등의 이유로 클라이언트가 종료되지 않은 상태에서 약 30초간 인게임 서버와 통신이 원활하게 이루어지지 않으면 자동으로 접속을 끊습니다.
    • 해당 경우, 뒤끝SDK에서 자동으로 재접속을 수행해줍니다.
  • 게임도중 클라이언트의 비정상적인 종료 혹은 유저가 강제로 클라이언트를 종료했을 때는 아래 재접속가능 여부를 체크하여 재접속을 수행할 수 있습니다.
  • 게임이 종료되지 않았다면 게임의 제한시간(1시간)동안 재접속이 가능합니다.

재접속이 불가능한 상태

  • 인게임 서버와 접속이 끊긴 이후 매치서버에서 매칭 신청을 하면 자동으로 해당 게임에서 패배처리됩니다. 게임에서 패배처리 된 이후에는 해당 게임에 다시 재접속할 수 없습니다.
  • 인게임 서버와 접속이 끊긴 상태에서 다른 유저가 게임을 끝내면(게임 결과 메시지를 서버로 보내면) 해당 게임에 재접속할 수 없습니다.

예외상황

  • 모든 유저가 게임 결과메세지를 보내지 않고 룸을 나간 경우에도 룸은 살아있습니다.
  • 해당 룸은 재접속이 가능하고 재접속 시 게임 결과 처리 실패로 OnMatchResult가 리턴됩니다.
  • 이 경우 유저가 룸에 접속하여 게임 결과메시지를 보내기 전까지는 룸이 1시간동안 활성화 상태이고, 비정상적인 예외상황이기에 인게임서버와의 접속을 끊고, 매칭서버에 접속해서 새로운 매칭을 신청하도록 프로세스를 작성하는 것을 추천드립니다.