4

この質問のタイトルが適切かどうかはわかりませんが、これを一言で表す方法がわかりませんでした。

私は現在、サーバー側で NodeJS と Socket.io を使用し、クライアント側で HTML5 を使用して、マルチプレイヤー 2D ゲームを開発しています。このゲームは、終了するまでプレイヤーの進行状況を保存する必要はありません。また、スコアやヘルプなど、プレーヤーに関するすべての情報が常に有効であることを確認する必要があります。そこで、この情報をサーバーに集中させることにしました。この方法では、クライアントはサーバーにスコアを送信せず、送信された情報に基づいてサーバーがスコアを計算し、すべてのクライアントに送信します。それに加えて、このゲームのさまざまなセッションを最小 2 プレーヤーと最大 4 プレーヤーで実行できます。

最初は、ゲーム セッション データを常にメモリに保持するサーバーでこれを実装することにしましたが、代わりにデータベースを使用してこのデータを保存するべきではなかったかどうか自問しています。未完了のセッション データは使用しないため、データベースを使用して、セッション データが終了したときにのみセッション データを保存しています。しかし、代わりに、セッションとプレイヤーのデータを、プレイ中にデータベースに保持する必要がありますか? ここでの問題は、クライアントがサーバーと非常に頻繁に通信することです。このアプローチでは、最初にデータベースからデータを要求し、必要な変更を加えてデータベースに保存し、クライアント要求ごとにこのプロセスを繰り返す必要があります。これに対する答えは明らかかもしれませんが、代わりにこのアプローチを使用する必要がありますか?

ゲームを開発するのは初めてなので、通常はどのように機能するのかわかりません。サーバーを高速にしたいことはわかっています。主に、マルチプレイヤー ゲームの開発について見つけたすべての例とチュートリアルで、データベースについて言及されていなかったので、すべてをメモリ上に維持することを選択しました...

ありがとうございました!

4

3 に答える 3

5

また、node.js と socket.io を使用してマルチプレイヤー ゲームを開発しています。クライアント要求ごとにデータベースにアクセスしないでください。

1) I/O 操作は高価です。

データベースへの読み取り/書き込みは「高価」(遅い) です。メモリから読み書きする方がはるかに高速です。

2) I/O 操作は Node.js で非同期にする必要があります。

function read_or_alter_database(input, function(callback){ update_the_client(); });

これにより、データベース操作がノンブロッキングになります。操作が完了するまで、アプリケーションの残りの部分は引き続き実行されます。次に、コールバック関数が実行されます。プレーヤーのクライアントがゲームの状態を更新するためにデータベース アクセスに依存している場合、これはブロック操作になり (データベース操作が完了するまでゲームを続行できないため)、Node.js の主な目的が無効になります。

3) マルチプレイヤー ゲームでは大量のクライアント リクエストが発生します。

このプラス ポイント 1 により、効率が大幅に低下します。

于 2013-01-15T18:11:49.123 に答える
0

すでに答えがあるようです。状態はセッションが完了したときにのみ重要になるため、そのセッションの完了時にのみデータを保存してください。中間値を保存しても意味がなく、速度が低下するだけです。

于 2013-01-15T18:15:22.063 に答える
-1

Node.js は比較的新しい開発プラットフォームです。そのようなシステムをサポートできるかどうかは不明です。通常行われている限り - 可能な限り多くの情報が最初にクライアント側に保存され、次にサーバーは通常データをメモリに保持します、または少なくとも、これは人気のあるゲームのLeague of Legends、Worldの場合に当てはまることを知っていますウォークラフトの、スタークラフトII。繰り返しになりますが、これらのアプリケーションは HTML/Node.js ではなく、システムに対する要求が非常に高く、巨大な開発会社によるものです。小規模なゲームには DB アプローチが適しているかもしれませんが、私は聞いたことがありません。 .

于 2013-01-15T14:50:45.437 に答える