1

重要なタイミング要素を持つキャンバス ベースのゲームを作成しています。ゲームが完了すると、ユーザーの完了時間がサーバー上の PHP/MySQL に送信され、他のプレイヤーと比較されます。

サーバー側のタイミング (つまり、要求時間の開始から要求時間の送信まで) は、ロード時間がユーザーの実際の時間に影響を与えるため、この場合は非効率になる可能性があるようです。

私が問題を抱えているのは、送信された時間が正当であることを保証する方法を決定することです. 誰かがコンソールを使用してクライアント側のコードを編集し、誤った時間を送信するのを止めるにはどうすればよいですか?

どんな助けでも大歓迎です。

4

4 に答える 4

8

できません。クライアントを決して信用しないでください。サーバーへのすべてのリクエストが偽装される可能性があります。

于 2012-10-12T14:41:46.747 に答える
1

それはいけません。単に。

時計が遅く動いている可能性があり、開始と終了の間の日付/時刻が変更される可能性があります。

私は、いくつかの動作を観察するためにクロックを遅くするプロジェクトに取り組んできました。

したがって、クライアントを信頼しないでください。時計に頼ってください。それはあなたがコントロールできるものです。

(これについて考えてみてください - あなたが路上で見知らぬ人に時間を尋ねると、彼らの時計は少し速いか遅いかもしれません.私の時計は少し速いので、遅れても時間通りに来る可能性が高くなります!)

于 2012-10-12T14:45:55.367 に答える
0

ゲームの開始時に、サーバーに ping を送信し、サーバーにサーバー時間をセッションまたはその他の永続化方法に保存させます。完了時に完了時間をサーバーに送信します。サーバーでは、開始時間リクエストと終了時間リクエストの時間差と、ゲームから送信された時間を比較します。時間の多少の不一致は許容しますが、ベルギが言うように、それは多くの作業であり、それでも 100% になることはありません.

フロー図:

Game start -> send command to server. 
Server saves time: (2:53pm)

Game end -> send players time to server (3mins).
Server gets current time (2:56pm)

Server compares start time (2:53pm) with current time (2:56pm) which is 3mins.
IF the difference == 3mins +/- 30sec then assume time is valid.

どれだけ厳密にする必要があるか、どのような許容範囲を受け入れるかによって、詳細を調整します。- クライアントがゲームをプレイしていない可能性があることを忘れないでください...どんなリクエストでもなりすましの可能性があります。これが良い出発点になることを願っています。

于 2012-10-12T14:49:53.980 に答える
0

サーバー側のタイミング (つまり、要求時間の開始から要求時間の送信まで) は、ロード時間がユーザーの実際の時間に影響を与えるため、この場合は非効率になる可能性があるようです。

できる。エキサイティングなオンライン ゲームの世界へようこそ。これは、サーバー側アプリケーションをより高度にする必要がある場所であり、人々の時間を変更してより公平にすることができます。Ping/traceroute を実行して、遅延を把握する必要があります。

私が問題を抱えているのは、送信された時間が正当であることを保証する方法を決定することです. 誰かがコンソールを使用してクライアント側のコードを編集し、誤った時間を送信するのを止めるにはどうすればよいですか?

HTML5 がこの分野で何らかの進歩を遂げているかどうかはよくわかりませんが、そうなるとは思いませんが、1 つの方法として、Flash を使用するか、ブラウザーの外部でアプリケーションを使用することが考えられます。場所。

于 2012-10-12T14:54:42.143 に答える