2011-08-24 11 views
16

プレイヤーが一緒に遊ぶことができるWebGLベースのリアルタイム戦略ゲームを作成する予定です。 Node.jsを使用してゲームサーバーを作成し、リアルタイム接続用のWebソケットを使用します。ストラテジーゲームサーバーのコンセプト

私は、クライアントを同期させるための最良のコンセプトが何であるかについて悩んでいます。

ユーザの注文(移動ユニット、建物の建物など)のみをサーバに送信し、それを他のすべてのクライアントに送信することも可能です。しかし、ここでは、私は遅れの問題があります。私はゲームがこのように非同期になると思う。

もう1つの可能性は、サーバー上でゲームを調整することです。クライアントは依然としてサーバーに命令を送信しますが、サーバーはすべてのユニット&のすべての変更された状態を高い間隔でクライアントに送信します。ここで問題となるのは、大量のデータであり、どれくらいの時間がかかるのかです。

他にもアイデアや改善提案がありますか?

ありがとうございます!

答えて

20

基本的には、の速度のセキュリティの間で決める必要があります。

クライアントがジョブと計算を実行する速度は速くなりますが、クライアントがデータを操作できるため、データが危険にさらされます。

一方、サーバーを持っているとすべてのジョブが遅くなりますが、データはより安全です。

デュアルアプローチを選択し、クライアントに一部のデータのみを計算させ、同期させてから有効性をチェックし、残りがサーバー上で実行されるようにすることができます。

はまた、どのように依存するか速いゲームの実行、計算するデータの量、サーバーおよびバンド/接続の速度、等...あなたは両方の方法をプロトタイプとエミュレートするためにいくつかのテストを試してみてください

クライアントとサーバーがロードされます。

ゲームが小さい場合、私はより多くのサーバー側の作業を選択します。一方、多分複雑なゲームでは、おそらくクライアントにもっと多くの仕事を共有するのが一番です。とにかく私はいつもトレードオフが必要だと思う。ここで

は、いくつかのリンクは、あなたが便利

Multiplayer Game Programming Introduction

Real time strategy networking

Multiplayer Programming thread (old but still with many useful links)

Lag Compensation

Prevent Multiplayer Cheating

を見つけることができます

最初のリンクは、私が多くの日に戻ってきたのを助けてくれました。そしてimhoは、依然として主題に応じた最高のリソースの1つです。

書籍

Multiplayer Game Programming

1

残念ながら私はWebGLベースのオンラインゲームでは経験はありませんが、通常はゲームロジックをクライアント側で実行して結果を同期させるのが良い方法です。

このアプローチでは、どのゲームオブジェクトがどのクライアントによって「所有」されているかを把握することが重要です。クライアントは自分のオブジェクトからの更新(作成、更新、削除)のみを送信し、他のクライアントからの他のゲームオブジェクトの更新を受け取ります。

さらに、「Player has entered/left」などのメッセージを追加するメッセージングフレームワークを設定することもできます。

このコンセプトは、私が作成したゲームにとって有益であることが証明されており、それがあなたにとって有用であることを願っています。

0

ないのWebGLについて確認が、私の理解、次のアプローチには良いだろう。

  1. は、サーバー上で(選手間で共通している)すべてのオブジェクトを初期化し、クライアントのスタートで、彼らに
  2. を実行し、それがサーバー上で実行されているオブジェクトに対して(特定のクライアントに関連する)すべてのレンダラを要求します。
  3. クライアントは、受信したすべてのレンダラーのUIでオブジェクトをレンダリングします。
  4. クライアントがUIを更新すると、変更がサーバーに通知され、サーバーによってオブジェクトが更新されます。
  5. 各プレイヤー(クライアント)は、変更。

このアプローチは、UI /クライアント固有のオブジェクトではない一般的なオブジェクトに固有のものです。

1

あなたは、サーバー上のゲームの状態とロジックを持っている必要がありますそうでなければ、あなたのゲームは不正行為に広く開いています。サーバーはゲーム状態の最終的な権限です。

0

セキュリティ上の理由から、すべてのロジックがサーバー側にあり、すべてのデータ更新がサーバー上にある必要があります。

しかし、クライアントは何らかのロジックを予測し、アニメーションを最初に再生することができます。これはクライアント予測と呼ばれます。

クライアントのロジックを確認するサーバー側は、不正行為がない場合はすべて完了しています。 不正行為者がいる場合、サーバーはクライアントに正しい状態に戻るように指示できます。

サーバ用にnode.jsを使用している場合は、オープンソースフレームワークpomeloがあります。 また、完全なソースコードデモとオンラインデモがあります。lordofpomelo