더북(TheBook)

한편 몬스터 정보를 가진 서버 2에서는 이 명령을 받아서 몬스터 정보를 업데이트합니다. 업데이트 결과는 서버 1에 알려 줍니다.

서버 1은 이 응답을 받으면 기다림을 멈추고 나머지 처리를 실행합니다. 서버 2의 응답 내용이 “몬스터의 체력이 바닥났다.”이면 비로소 서버 1이 가진 플레이어 캐릭터에게 아이템을 보상해 주는 처리를 합니다. 그리고 몬스터 사냥 로직은 끝이 납니다.

이를 코드로 표현하면 다음과 같습니다.

Player_Attack(player, monster)
{
  lock(player)
  {
      player.bullet--;
      e = otherServer.DamageCharacter(
          player.id, monster.id, 10);
      waitForResult(e);
      if (e.hitPoint < 0)
      {
          player.item.Add(gold, 30);
      }
  }
 
  DamageCharacter(attacker, character, damage)
  {
      character.hitPoint -= damage;
      result.hitPoint = character.hitPoint;
      Reply(result);
  }
}

여기까지의 동기식 분산 처리 방식을 ‘동기식 명령 처리법’이라고 지칭하겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.