MMORPGサーバー側Javaアーキテクチャ


8

現在ターンベースのMMORPGゲームを制作しています。クライアントはAndroidで実行することになっています。今、私の友人がグラフィックをやっていて、私はゲームのクラス(プレーヤー、武器など)をやっています。さて、戦いが始まると、クラスはインターフェースによって操作できます(実際、私のパートナーにとっては、純粋なインターフェースを操作するようなもので、実装クラスへのアクセスは必要ありません)。

次に、複数のプレイヤーを許可するためにゲームサーバーを導入する必要があります。そして、いくつかの非常に重要な質問が発生します:

1)クライアントにクラスを残さずにゲームモデルをサーバーに完全にコピーしますか、またはサーバーに1つとデバイスに1つ、モデルの2つのコピーを用意して、それらの間の定期的な同期を完了する方が良いですか?

2)クライアントとサーバーのどちらの接続方法を選択しますか(視界内のクライアントはAndroidフォンです)?サーバーに関しては-私はそれを使っていくつかの経験があるjava原因に向けています。しかし、今の質問は-このタスクにはソケットを使用する方がいいですか、それともRESTサービスを使用できますか、それともJava EEサーバーに接続することも可能です。合併症?ゲームはマルチプレイヤーですが、ターン制なので、頻繁に更新する必要はありません。

3)スレッドについてはどうですか?すべてのクライアントは独自のスレッド(ソケットの場合)を持つ必要がありますか?

4)REAL MMORPGサーバーゲームのプログラミングに関する本はありますか???

回答:


7

ゲームモデル全体をサーバーにコピーしないでください。サーバーにすべてのテクスチャと詳細なメッシュをロードしたくありません。できるだけシンプルにし、場所、健康状態、動きなどの重要なプロセスをすべて処理しますが、すべてをロードすることはしません。-クライアントを信頼しないでください。

複数のWikiとともに、多くの本があります。IdeaFrabrik、Epic Games、Exitgames、Unity(mmoもサポート)などのすべてのエンジンサプライヤーは、自社の製品に関する非常に優れたドキュメントを持っています。それらのほとんどは公開されているため、完全なソリューションにアクセスでき、実際の動作を確認できます。

必要な本を見つける最も簡単な方法は、AmazonでMMORPGを検索してから、本のカテゴリに移動して「プログラミング」サブカテゴリを選択することです。グーグルするとあなたは望ましくない結果を得るでしょう...

これが私が見つけた本のリストです

私はサーバープログラミングに深く関わっていませんが、実際のところ、MMORPGプロジェクトにUnity + Photon Cloudエンジンソリューションを選択するのは間近でした。(HeroEngineが勝った)サーバー側はこれでC#で実行されます。覚えていることの1つは、チュートリアルで説明された方法です。


ゲームにはエンジンが必要ないため、エンジンは使用していません。クールなグラフィックが欠けています。したがって、3D向けの最高の機能を備えたUnityは必要ありません。あなたが提供した本は広すぎるようです-それでもマルチプレーヤーの高負荷サーバーを書く方法を説明する本への言及はありません。しかしアドバイスをありがとう。
Artem Moskalev 2013年

TCPサーバークライアントプログラミングについて学ぶ必要があります。「残忍な言い方をすると、サーバープログラミングはゲームでも使用されます」。あなたはその基礎を学ぶ必要があります。これにより、Javaでの使用を開始できます。edn.embarcadero.com/article/31995
Mikolaj Marcisz 2013年

はい、私はすでに知っています=)JMSと単純な文字列メッセージサーバーに関連してそれらを十分にプログラミングしました=)そのため、以前に作業したJava EEと比較して、どちらが良いか+ソケットはかなり低いレベルです)これまでのところ、ゲームサーバーのプログラミングは、Webサイトや単純なメッセージ交換プログラムのプログラミングとはまったく異なるように見えるので、私はマルチプレイヤーゲームでそれがどのように行われるかを知りません。
Artem Moskalev

4

1)クライアントにクラスを残さずにゲームモデルをサーバーに完全にコピーしますか、またはサーバーに1つとデバイスに1つ、モデルの2つのコピーを用意して、それらの間の定期的な同期を完了する方が良いですか?

Mikolajと同意し、すべてをコピーしないでください。できるだけ少ないデータを送信します。クライアントとサーバーで同じクラス(他のアセットではなくデータモデルのみを表す)を持つことができますが、それらをネット経由で送信しないでください。サーバーでそれらをシリアル化し、クライアントで非シリアル化する必要があります。クライアントはコマンドのみをサーバーに送信する必要があります。

2)クライアントとサーバーのどちらの接続方法を選択しますか(表示されているクライアントはAndroidフォンです)?サーバーに関しては-私はそれを使っていくつかの経験があるjava原因に向けています。しかし、今の質問は-このタスクにはソケットを使用する方がいいですか、それともRESTサービスを使用できますか、それともJava EEサーバーに接続することも可能です。合併症?ゲームはマルチプレイヤーですが、ターンベースなので、頻繁に更新する必要はありません。

あなたはターンベースのMMORPGを計画しています(それがどのように機能するかはわかりません)。したがって、速度はそれほど問題ではありません。あなたはどんな種類のサービスも使うことができます、RESTは良いかもしれません、それは簡単です。通常、MMORPGはUDPを使用し(安全ではなく、より小さく、より高速)、失われたパケットが重要ではない移動の更新や、安全な通信のためにTCP(安全、オーバーヘッド)を使用します。ほとんどのゲームは、UDPおよびTCPを介して暗号化され圧縮されたある種のカスタムプロトコルを使用して、クラックを高速かつ困難にします。

3)スレッドについてはどうですか?すべてのクライアントは独自のスレッド(ソケットの場合)を持つ必要がありますか?

通常、スレッドプールが必要です。プールからの各スレッドは1つの要求を処理し、その後リサイクルされます。十分なスレッドがない場合は、より多くのスレッドのブロックまたは割り当てを検討できます。

4)REAL MMORPGサーバーゲームのプログラミングに関する本はありますか???

ミコライはすでにあなたのためにそれをググっていました...


スレッドプールについて詳しく説明してもらえますか?ソケットがある場合、サーバーは要求をリッスンしており、それぞれに新しいソケットを割り当てます。すべての着信情報を持つこれらのソケットは、スレッドへのジョブとしてカプセル化できます。しかし、それらのスレッドに異なるジョブがあるたびに、スレッドはどのようにスレッドプールから取得されますか?+オープンソケットはいくつが平均的なサーバーを保持できますか?RESTよりもリソースを多く消費しますか?+ RESTではセッション状態がないため、プレーヤー情報を維持することは困難です。しかし、Javaの残りの部分はエンタープライズサーバーに完全に統合されています。これは良いことです
Artem Moskalev 2013年

紹介されている本は、MMORPGのOOPデザインに関するものです。そのため、IdはGoFに固執します。繰り返しになりますが、サーバー側のマルチプレイヤーオンラインゲームプログラミングは、世代を超えて受け継がれたある種の神聖な知識であるようです=)すべてのフォーラム/投稿/本は、これらのアイデアに至っています。初心者」...そしてアドバイスは一切ありません...
Artem Moskalev 2013年


紹介されている本は、MMORPGのOOPデザインに関するものです。そのため、IdはGoFに固執します。この文は意味がありません。また、MMORPGを構築することは、ジェット機を構築することと同じです。紙飛行機で翼を稼ぐと思います。
MartinTeeVarga 2013年

あなたは紙飛行機について100%正しいです=)しかし、それらの本は紙飛行機についてさえもではありません(紙飛行機とは私はmmoサーバー側プログラミングを意味します)-私はすでにamazonのコメントからそれを学びました=)これらの本のいくつかは扱っていますMMORPGゲームのデザインパターン。ゲームを作成する同じコンテキストで、他のより優れた本から学ぶことができます。+私はすでにB-2を構築しているので、得られるあらゆるアドバイスに感謝します。ありがとう=)
Artem Moskalev 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.