게임 매 칭 및 결제 디자인

3919 단어
홑 옷
게임 은 단일 구역 의 단일 서버 모델 을 사용 하고 기능 적 으로 업무 복 과 방 복 으로 나 뉜 다.첫 번 째 버 전의 디자인 은 업무 복 은 단일 서버 이 고 방 복 은 무한 확장 이 가능 하 며 동적 으로 삭제 할 수 있 습 니 다.업무 복 관리 방 복 목록, 유 저 는 업무 복 이 일치 하고 방 에 일치 하 며 이 방 이 새로 만 들 어 졌 다 면 방 복 을 분배 하고 해당 하 는 방 복 에 방 을 만들어 야 합 니 다.이 배분 알고리즘 은 각 방 의 복 이 분 배 된 방 이 대체적으로 같다 는 것 을 보증 하 는 것 이 가장 좋다.후기 버 전 은 gate 층 을 도입 하고 업무 복 을 무한 확장 형식 으로 확대 하 는 것 을 고려 할 것 이 며 게이머 들 이 어느 업무 복 에 들 어 갈 지 는 gate 에 의 해 결정 된다.매 칭 서버 를 추가 하여 모든 유저 가 모든 방 복 에 매 칭 할 수 있 도록 합 니 다.
진입 절차
1. 유저 가 매 칭 탱크 에 입장 합 니 다.2. 매 칭 결과, 유저 가 어느 방 에 들 어 가 는 지 확인 합 니 다.3. 방 복 을 알 리 고 방 을 만 들 고 유 저 를 만 듭 니 다.4. 비 즈 니스 서버 에서 메 시 지 를 받 았 습 니 다: 방 을 성공 적 으로 만 들 었 습 니 다.(서버 창설 방) 5. 서버 수령 소식: 유저 창설 성공.(업무 복 은 유저 가 마지막 으로 들 어 온 방 을 기록 합 니 다) 6. 업무 복 아래 방 복 연결 정 보 를 보 내 고 로그 인 할 수 있 는 유일한 토 큰 을 포함 합 니 다.7. 유저 가 방 복 에 등록 합 니 다.8. 업무 복 수령 소식: 유저 가 방 복 에 등록 합 니 다.(업무 복 은 유저 의 현재 방 을 기록 합 니 다. 방 복 중인 유 저 는 하나의 집합 으로 관리 합 니 다)
체크아웃 절차
1. 유저 가 방 복 접속 차단 2. 업무 복 수령 소식: 유저 가 방 복 에 탑승 (업무 복 유저 현재 방 청소)
중 련 방 절차
1. 유저 가 지난번 에 들 어 온 방 id 와 sign 2 를 가 져 옵 니 다. 방 이 존재 하고 sign 이 같 으 면 클 라 이언 트 에 게 다시 연결 메 시 지 를 보 냅 니 다.
서비스 서버 의 룸 데이터
업무 복 은 각 방 복 에 어떤 방 이 있 는 지, 각 방 에 어떤 게이머 가 있 는 지, 어떤 게이머 가 방 복 에 있 는 지 등 정 보 를 관리 해 야 한다.업무 복 의 방 데 이 터 는 방 복 소식 을 받 아 만 들 고 소각 합 니 다.너무 오래된 방 을 만 들 고 방 에 너무 오래 들 어간 유 저 는 정기 적 으로 방 복 에 가서 기한 이 지 났 는 지 확인 해 야 합 니 다.유저 가 재연 결 을 진행 할 때, 방 복 에서 유저 나 방 정 보 를 찾 지 못 하면, 업무 복 의 유저 나 방 정 보 를 정리 해 야 합 니 다.
class RoomServer {
  //     
  Map roomMap;
  //          
  Map playerMap;
}

class Room {
  Integer id;
  String sign;
  //   id
  String serverId;
  //      
  Date createTime;
  List playerIds;
}

class Player {
  Long id;
  //       ,      。          ,      。
  Integer lastRoomId;
  String lastRoomSign;
  //    ,            
  Integer curRoomId;
  //           
  Date enterRoomTime;
  
}


서버 매 칭 규칙
일치 하 는 과정 은 단일 스 레 드 입 니 다.매 칭 규칙 마다 다 르 고 데 이 터 는 스스로 유지 합 니 다.1. 초보 모드, 각자 방 하나씩.Match Unit - new Room - Match Result 2. 자유 모드 로 각 방 마다 K 개인 상한 선 이 있 고 게이머 단위 에 따라 일치 하 며 꽉 차지 않 은 방 이 있 으 면 가입 하고 적당 한 방 이 없 으 면 방 을 만 듭 니 다.Match Unit - select Room - new Room - Match Result 3. 생존 모드, 각 방 마다 상한 k 명 이 있 고 사람 이 많은 방 을 우선 선택 하 며 꽉 차지 않 은 방 이 있 으 면 가입 하고 적당 한 방 이 없 으 면 방 을 만 듭 니 다.Match Unit - select Room - new Room - Match Result 서 바 이 벌 모드 와 프 리 모드 는 달리 서 바 이 벌 모드 는 개인 이 방 에서 k 분간 생존 해 야 하고 방 은 시간 제한 이 없다.자유 모드 는 방 에 k 분 만 존재 하고 유 저 는 k - 5 분 에 방 에 가입 할 수 있 습 니 다.4. 팀 모드, 규정된 인원수 에 맞 아야 경 기 를 시작 할 수 있 습 니 다.MatchUnit 은 단락 구간 별로 그룹 을 나 누 어야 합 니 다.
이 를 통 해 알 수 있 듯 이 매 칭 과정 에서 유지 해 야 할 데 이 터 는 Match Unit, Room 을 포함한다.이 데이터 들 은 언제 정리 합 니까?Match Unit 은 Match Result 가 생 겼 을 때 제거 하거나 일치 하 는 것 을 종료 합 니 다.Room 은 새 유저 와 일치 하지 않 을 때 소각 (예 를 들 어 인원 이 꽉 찼 습 니 다. 개국 k 분 후) 하거나 방 복 의 방 소각 소식 을 받 았 습 니 다.
Match Result 를 받 은 후에 다음 조작 을 게이머 스 레 드 에 맡 기 고 게이머 스 레 드 에서 방 데이터 직렬 화 를 완성 하여 방 복 에 들 어 갈 것 을 신청 해 야 합 니 다.
일치 하 는 조건 은 일치 하 는 대기 열 에 들 어가 기 전에 검사 합 니 다. 일치 하 는 소 모 는 일치 하 는 대기 열 에 들 어가 기 전에 공제 합 니 다. 만약 에 게이머 가 일치 하 는 것 을 취소 하면 공 제 된 자원 을 반환 합 니 다.
/**
 *     ,                ,           
 */
class IRoomMatcher {
  /**
   *     
   */
  MatchType getType();
  /**
   *   
   *        ,Future            
   */
  Future match(String id, Object attachment);
  /**
   *     
   *          ,Future              
   */
  Future cancel(String id);
   /**
   *         
   */
  void clear();
}

서비스 서버 결제 규칙
방과 유 저 는 따로 결제 할 수 있 으 며, 방 결제 시 유 저 는 반드시 결제 해 야 하지만, 유 저 는 방 이 결제 되 지 않 았 을 때 결제 할 수 있 습 니 다.
룸 관리
RoomServer 는 Room 관 리 를 했 고 IRoomMatcher 도 Room 관 리 를 했 습 니 다. 둘 은 어떤 차이 가 있 습 니까?RoomServer 의 Room 의 생명 주 기 는 방 복 으로 관리 되 고 방 복 의 Room 에 따라 만 들 고 소각 하여 소각 합 니 다.IRoomMatcher 의 Room 의 수명 주 기 는 자신 이 관리 하고 사람 이 꽉 차 면 소각 하 며, 룸 복 이 Room 에 소각 을 알 리 면 소각 해 야 합 니 다.

좋은 웹페이지 즐겨찾기