2010-01-29 5 views
1

나는 퀴즈와 같은 자바 스크립트 게임을 가지고 있으며 빠르게 진행될 것으로 예상됩니다. 사용자는 짧은 시간 내에 최대한 많은 질문에 답변해야합니다. 그는 예/아니오 질문을 제시하고 답변을 서버에 보내고 거기에서 유효성을 검증하고 피드백 (정확/부적합)을 표시합니다. 나는 자바 스크립트와 AJAX를 사용한다.자바 스크립트 게임/서버 통신/응답 확인

문제는 서버에서 확인 작업이 진행되어 두 개의 연속 질문 사이에 지연이 발생한다는 것입니다. 질문은 서로 독립적입니다 (결과는 다음 질문을 변경하지 않습니다). 나는 사용자가 대답 한 직후에 피드백을 받고 다음 질문 만보기를 원합니다.

현재 응답이 서버 측에서 유효성 검사를받는 동안 클라이언트 측에서 시계를 멈추고 다음 질문과 함께 피드백이 도착하면 다시 시작합니다. 또한 서버 측에서 게임 세션이 허용 된 시간과 네트워크 지연에 대한 합리적인 여유 시간을 초과하지 않도록 확인합니다.

내가 지연을 없애기 위해 생각할 수있는 유일하고 분명한 해결책은 클라이언트에게 답변과 함께 일련의 질문을 보내고 클라이언트 측에서 확인하는 것입니다. 이렇게하면 서버와의 통신을 최소화하고 (세션 당 한 번) 매끄러운 게임 환경을 제공합니다. 분명히 들어오는 메시지를 읽을 수있는 사용자는 자동으로 재생되고 완벽하게 재생되는 스크립트를 만들 수 있습니다. 클라이언트 코드와 대답을 난독 화하는 것은 약간의 도움이 될 수 있으며 그러한 악성 스크립트를 작성하는 데 드는 비용을 증가시킬 수 있지만 결정된 사용자가 자신의 스크립트를 만들지는 않습니다.

제 질문은 두 가지입니다. 첫째, 나는 큰 실수를하지 않고 나쁜 의도로 사용자를 완벽하게 처리하는이 문제에 대한 분명한 해결책을 놓치지 않기를 바란다. 나는 이론적으로 그런 해결책을 제시하는 것이 불가능하다고 생각하지만 여기에 증명을 적어 둘만한 충분한 공간이 없다 (!).

둘째, 게임이 끝날 때 돈이 없다는 점을 감안할 때, 지루한 코더가 내 작은 게임을 엉망으로 만들 것이라고 기대하지 않습니다. 그러나 더 심각한 경우에는 귀하의 의견과 귀하의 전략을 듣고 싶습니다.

+0

질문을 일괄 적으로 보내지는 않지만 서버 측에서 유효성 검증을 유지하거나, 다음 질문이 제기 된 후 잠시 또는 퀴즈가 끝날 때까지 올바른 응답을 지연하십시오 ? – bobince

+0

일반적으로 그렇습니다. 그러나 다른 이유로, 내 게임에 교육적인 부분이 있습니다. 피드백은 즉각적이어야하며 다음 질문이 제시되기 전에해야합니다. 플레이어는 그가 플레이하는 동안 어떻게 플레이하는지 배웁니다. 질문 프리젠 테이션과 피드백 프리젠 테이션을 비동기로 만들면 그는 배울 수 없습니다. –

답변

1

워밍업으로, 나는 내 마음에 오는 하나의 스케치 솔루션을 제공하고자합니다.

때때로 한 세트에 잘못된 질문과 답변 조합이 포함됩니다. 자동 로봇은 실제 플레이어보다 "정확한"(실제로 잘못된) 답변을주기 때문에 더할 나위없이 좋습니다 (다른 질문의 정확도와 이러한 위조 된 질문 사이에는 큰 차이가 없어야합니다). 비용은 실제 플레이어가 합법적 인 답변이 한 번 잘못된 것으로 간주된다는 것입니다. 그러한 가짜 질문의 수를 줄이면 봇 탐지 정확도를 희생하게됩니다.

필자는 필연적 인 결과로 나타나는 타이밍에 관해 스크립트가 사람처럼 행동한다고 ​​가정하고 매회 올바른 대답을 제공하지 않을 정도로 똑똑하다고 생각합니다. 그렇지 않으면 너무 쉬울 것입니다.

0

Javascript 만 사용하면 성취하려는 목표를 달성 할 수 없습니다. 그것에 대해 생각해보십시오. 클라이언트 측 언어 인 일반 텍스트 인 Javascript가 유효성 검사를 수행하는 경우 플레이어가 자바 스크립트에서 수행 할 것과 동일한 작업을 수행하지 못하며 올바른 대답을 얻지 못합니다.

악용을 최소화하기 위해 자바 스크립트를 난독 화하고 해시 형식 (md5/sha1/etc)으로 클라이언트에 응답을 제공하고 사용자가 제출 한 답변을 해시 한 다음 해시를 검증 할 수 있습니다. 그런 식으로 답변을 일반 텍스트로 볼 수는 없지만 게임에 객관식 답변이 제한되어있는 경우 치터가 모든 질문을 해시하고 답변 일괄 처리와 비교하는 것은 사소한 일입니다.

지연 시간은 정확히 얼마입니까? Ajax는 매우 빠릅니다 ... 100-200ms 범위의 응답 시간을 가진 일부 응용 프로그램을 보았습니다. 사용자 환경에 지장을주지 않도록 충분히 낮아야합니다. 응답 시간이 그보다 느리다면 가장 좋은 방법은 응답을 더 빠르게 계산하기 위해 애플리케이션의 서버 측 부분을 최적화 할 수있는 방법을 찾는 것일 수 있습니다.

+0

나는 순수한 자바 스크립트가 악용을 완전히 제거 할 수 없다는 것에 동의한다. 응답 시간 (앞뒤)은 확실히 두 번째이며 일반적으로 500ms 미만입니다. 질문 사이에 필러 (예 : 기대를 불러 일으키는 간단한 사운드 샘플)를 사용하지만 드물게는 응답 시간이 500ms를 초과하며 필러조차도 채울 수 없습니다. 질문 사이의 고르지 않은 지연은 어색함을 느낍니다. –

관련 문제