턴베이스 게임 서버를 구축하는 방법에 대해 추천 할만한 참고 자료 / 책이 있습니까? 체스 플레이어를 페어링하고 게임 상태를 유지하는 체스 서버와 같습니다. 예를 들어, 과거 IGS (weiqi)는 소켓 기반 구현입니다. 배울 수있는 현대 기술은 무엇입니까? 감사!
턴베이스 게임 서버를 구축하는 방법에 대해 추천 할만한 참고 자료 / 책이 있습니까? 체스 플레이어를 페어링하고 게임 상태를 유지하는 체스 서버와 같습니다. 예를 들어, 과거 IGS (weiqi)는 소켓 기반 구현입니다. 배울 수있는 현대 기술은 무엇입니까? 감사!
답변:
나는 그 주제가 사소한 것이기 때문에 이것에 대한 특정 책이 없다고 생각합니다.
플레이어가 메일을 통해 액션을 보낼 수있는 메일 서버를 상상해보십시오. 서버에는 지금까지 메일로 수행 된 모든 작업이 있으며 이는 게임 상태를 의미합니다. 게임 상태를 다시로드하려면 메일 내부의 모든 작업을 시간순으로 실행하십시오. 당신이해야 할 유일한 것은 누구의 차례인지 확인하는 것입니다 ...하지만 그것도 쉽습니다 (예 : 차례 번호). 최신 기술이 필요하지 않습니다. 수정 된 메일 서버 / 클라이언트 솔루션이 필요합니다.
페어링 ppl은 Elo 를 통해 수행 할 수 있지만 ...
그것이 저라면 소켓으로 처음부터 만들 것입니다. 전송할 데이터의 양은 매우 적으며 턴 기반 특성으로 인해 약간의 대기 시간이 눈에 띄지 않습니다.
제 생각에는 실제 질문은 필요한 추가 기능입니다. 게임 세션이 지속됩니까 (누군가가 다시 참여할 수 있습니까, 게임을 저장할 수 있는지 등)? Civilization 스타일 저장을 수행하는 경우 저장 데이터를 모든 클라이언트에 푸시하거나 검증을 위해 서버 제공 키가 포함 된 저장을 클라이언트 측에 수행하려고 할 수 있습니다.
예를 들어 "플레이어 2가 유닛을 움직이고 있습니다"또는 "상대방이 AFK 일 수 있습니다"와 같은 종류의 턴간보고가 필요합니까? 그렇다면 소켓 연결을 열어 두어야 할 수도 있습니다.
일반적으로 말하자면, 설득해야 할 강력한 이유가 없다면 서버를 최대한 멍청하고 단순하게 유지하겠습니다. 디버그 시간이 줄어 듭니다. 실제 게임 클라이언트없이 텔넷을 사용하여 서버를 테스트 할 수 있기 때문에 평범한 텍스트 프로토콜을 사용하는 것과 비슷합니다 (주어진 문제에서 의심 될 수 있음). 어쨌든 확인하십시오).
편집 : 게임이 일대일 게임 만 지원하는 경우 피어 투 피어 연결을 살펴볼 가치가 있습니다.
서버가 무엇인지, 서버의 책임이 무엇인지 지나치게 생각하지 않는 것이 중요합니다. 이 경우, 상대적으로 연기가 느린 게임이 있으므로 서버 아키텍처가 엄청나게 복잡하지 않습니다 (마케팅이 실패한 빠른 속도의 게임 등). 연결된 클라이언트가 정보 패킷을 보내려면 서버가 TCP 포트에서 수신 대기해야합니다 (어쨌든 속도가 필요없는 경우 UDP를 건너 뛸 수 있음). 패킷을 수락하고 게임 규칙에 따라 유효성을 검사 한 후 응답을 보냅니다. 특정한 경우, 서버는 현재 자신의 차례가 누구인지 알고 자신의 차례가 될 때까지 다른 플레이어의 행동을 거부합니다.
어떤 기술을 염두에두고 있는지 모르지만 Kyronet 라이브러리를 사용하면 Java에서 쉽게 할 수있는 일이 있습니다. 게임 액션을 중앙 서버로 보내고 (두 플레이어 중 하나 일 수도 있음) 처리 한 다음 두 플레이어에게 게임 업데이트를 다시 보내십시오. .NET과 비슷한 것이 있다고 확신합니다.