게임을하는 임의의 수의 TCP 소켓 네트워크 클라이언트에 대한 게임을 관리하는 일반 게임 서버에서 일하고 있습니다. 나는 작동하는 덕트 테이프와 함께 해킹 된 '디자인'을 가지고 있지만 깨지기 쉽고 유연하지 않은 것처럼 보입니다. 강력하고 유연한 클라이언트 / 서버 통신을 작성하는 방법에 대해 잘 정립 된 패턴이 있습니까? (그렇지 않으면 아래 내용을 어떻게 개선하겠습니까?)
대략 나는 이것을 가지고있다 :
- 게임을 설정하는 동안 서버에는 클라이언트의 동기 요청 및 서버의 응답을 처리하는 각 플레이어 소켓마다 하나의 스레드가 있습니다.
- 그러나 게임이 시작되면 한 번의 휴면을 제외한 모든 스레드가 해당 스레드가 이동에 대해 한 번에 하나씩 모든 플레이어를 순환합니다 (요청 된 응답-응답).
여기 내가 현재 가지고있는 것의 도표가있다; 더 큰 / 판독 가능한 버전 또는 66kB PDF를 보려면 클릭하십시오 .
문제 :
- 플레이어는 정확한 메시지로 정확하게 차례대로 응답해야합니다. (나는 각 플레이어가 무작위 쓰레기로 응답하고 그들이 나에게 유효한 움직임을 주면 움직일 수 있다고 가정합니다.)
- 플레이어가 자신의 차례가 아닌 한 서버와 대화 할 수 없습니다. (서버가 다른 플레이어에 대한 업데이트를 보내도록 할 수는 있지만 비동기식 요청은 처리 할 수 없습니다.)
최종 요구 사항 :
성능이 가장 중요하지 않습니다. 이것은 주로 비 실시간 게임에 사용되며, 까다로운 인간이 아니라 서로 AI를 뚫는 데 주로 사용됩니다.
게임 플레이는 항상 턴제 상태입니다 (매우 높은 해상도 일지라도). 각 플레이어는 항상 다른 하나의 플레이어가 턴을하기 전에 한 번의 움직임을 처리합니다.
차이가 나는 경우 서버 구현은 Ruby로 이루어집니다.