タグ付けされた質問 「client-server」

クライアントサーバーモデルは、1つのノード(サーバー)が他のノード(クライアント)に対して何らかのサービスを実行する集中コンピューティングモデルです。

11
JavaScript / HTML5 Webゲームがコピーまたは変更されるのをどのように防止しますか?
私はJavaScriptとHTML5を使用して構築されたゲームを計画しています。 誰かがWebサーバーからJavaScriptを単純にコピーし、それを使って独自のゲームを作成する(私の最大の関心事ではない)ことを防ぐ方法を理解するのに苦労しています。ゲームが最終的にマルチプレイヤーをサポートする場合はワイルドです。 誰もがJavaScriptを読み取れないようにするために何かできますか? そうでない場合、すべてのゲーム処理は、ユーザー入力のキャプチャとグラフィックスの描画のみをクライアントが担当するサーバーで実行する必要がありますか?

5
ゲームの俳優は自分自身を描く責任がありますか?
私はゲーム開発は初めてですが、プログラミングは初めてです。 私は(再び)JavaScriptのcanvas要素を使用してPongタイプのゲームで遊んでいます。 Paddle次のプロパティを持つオブジェクトを作成しました... width height x y colour 次のPongようなプロパティを持つオブジェクトもあります... width height backgroundColour draw()。 draw()現在、メソッドはをリセットしてcanvasおり、そこで問題が発生しました。 必要があるPaddleオブジェクトが持つdraw()その描画方法は責任、または必要があるdraw()のPongオブジェクトがその役者を描くための責任がある(私が間違ってる場合、私はそれが正しい用語であると仮定し、私を修正してください)。 私はのためにそれがadvantagousだろうと考え出しPaddle自体を描画するために、私は2つのオブジェクトをインスタンス化するように、PlayerとEnemy。それはでなかった場合Pongのdraw()、私は二度同様のコードを記述する必要があると思います。 ここでのベストプラクティスは何ですか? ありがとう。

2
リアルタイムFPSゲームでサーバーに送信するもの
ローカルプレイヤーの位置をサーバーに伝える正しい方法は何ですか?一部のドキュメントでは、入力が生成されるたびに送信する方が良いと述べています。また、いくつかの文書は、クライアントが一定の間隔で位置を送信すると述べています。 入力を送信するアプローチでは、プレーヤーが方向キーを押している場合はどうすればよいですか?つまり、すべてのフレームでサーバーにパッケージを送信する必要があります。多すぎませんか?また、マウス入力からのプレーヤーの回転もあります。以下に例を示します。 http://www.gabrielgambetta.com/fpm_live.html 固定間隔アプローチで位置を送信するのはどうですか。サーバーに送信するメッセージが少なすぎます。ただし、応答性も低下します。 それで、どちらの方が良いですか?

3
MMOのサーバーとの低トラフィッククライアント同期
プレイヤーが矢印キーで宇宙船を操縦して宇宙船で飛行し、他のプレイヤーと協力するMMOを実装しています。 プレイヤーがロケットなどから船をかわすことができるように実装したいので、サーバー使用と同じ世界をシミュレートするアルゴリズムを使用して、クライアント側でゲーム全体の状態を予測しようとしています。そのゲームワールドはC#で記述され、クライアント内で直接呼び出され(Unity3Dで記述されます)、C ++サーバー上のCLRを介して(Linuxの下で)呼び出されます。UDPを介した接続。 問題は、たとえば、単一のマップ内で1000人のプレーヤーを維持する方法です(他のすべてのゲームオブジェクト、Mobを除く)。 サーバーをクライアントと毎秒50回同期する (一定の半径内で)彼が見ることができるゲームオブジェクト(およびプレイヤー)の状態を各クライアントに送信する ビュー半径内の各プレイヤーに100個のオブジェクトを送信する必要があります ゲームオブジェクトごとに平均50バイトを送信する必要があります(id、x、y座標、回転、状態...) そのため、次のようなネットワーク帯域幅が必要になります:1000(クライアント)* 50(1秒あたりの回数)* 100(各プレーヤーに送信するオブジェクト)* 50(オブジェクトあたりのバイト数)= 250 000 000バイト/秒!それは不可能だ! どういうわけかこの値を減らすことは可能ですか?たとえば、クライアントがゲームの世界を(長期間)完全にシミュレートし、他のクライアントの入力だけを送信し、数秒ごとにゲームの世界を同期できるようにします。 。 とにかく、そのようなゲームはどのように一般的な方法でプログラムされていますか?ありがとうございました。

5
mmorpgはどのようにデータを保存しますか?
server.exeでSQLデータベースを使用したい。 1000人のユーザーをオンラインで言うことができます。プレイヤーはプレイするときにデータを変更します。サーバーはこれらの更新を保存する必要があります。 しかし、どのように? 私は2つの方法があると思います: 1)サーバーは実行時にRAMに保存し、いつか1時間ごとにサーバーがRAMからSQLデータベースにデータを書き込みます(更新)。ただし、電力が供給されるか、何らかの理由でサーバーがシャットダウンすると、更新は保存されません。もちろん、更新を失いたくありません。 2)サーバーは実行時にデータベースに更新を保存します。しかし、速度はどうなりますか?方法を考えました。以下に画像を示します。この方法で1000人のオンラインプレイヤーに十分な速度を得ることができますか?

3
プレイヤーが見えないときに動きを正しく予測する方法は?
私はマルチプレイヤーゲームを使用しており、クライアント側で予測していますが、一部のプレイヤーはポーションを飲んで見えなくなります... 問題は、それらが見えなくなると、クライアントがそこにいることを知るために使用できるものを共有しないため、プレイヤーが見えないプレイヤーが占有しているタイルに足を踏み入れようとすると、彼は成功すると予測し、その後、サーバーから送信されたい位置補正。 解決策の1つは、クライアントが認識できるように何かを共有することですが、ハッカーはそれを使用して、目に見えないプレーヤーがどこにいるのかを見つけることができます。 ところで、私はすでに定期的な動きの予測を解決しました、それは完全に動作します。

3
一部のMMOでクライアントのメモリを編集すると、不正行為が許可されるのはなぜですか?
ゲームクライアントのメモリの編集が機能する理由 なぜ多くの「ハック保護」ツールがクライアントに付属しているのですか? クライアントサーバーゲームを設計する場合、すべてはサーバーで行われ(ゲームワールドのシミュレーション)、クライアントはキャラクターの近くの世界の一部のステータス更新を受信する受動的な消費者であり、次のような情報のみを送信します。キーストロークまたは移動/アクションコマンド。たぶんここに何かが欠けているかもしれませんが、その設計では、クライアントメモリでSTRを200上げるようなハック(値が存在する場合)は効果がありません。 私が考えることができる唯一の説明は、メモリ編集が機能するゲームでは、シミュレーションの一部がクライアントとサーバーで実行され、その後すべてのクライアントが定期的に同期されるだけだということです。試合が設定されると、プレイヤーの数が固定されたリアルタイム戦略ゲームの設計を理解できますが、MMORPGではなぜですか?サーバーの負荷を減らす戦略ですか?

6
ゲームホスティングにはどのようなオプションがありますか
免責事項:私はこの質問が開発島を去り始めることを知っていますが、それはゲーム開発に非常に関連しており、それでもこれが最良の場所だと思います。 多くの無料のMMO /オンラインデスクトップクライアントゲームが出回っています。私はそのような資金を調達する能力に困惑しています。私は自分自身をホストすることを気にしませんが、少なくとも誰かにマッチメイキングサービスをホストしてもらいたいです。これらのインディー開発者が本当にサーバーの排水口にお金を注いでいるなら、私はうんざりしているが、誰かが「私を学ぶ」ことができるなら:)

5
リアルタイム戦略ゲームのネットワーキング
私は自分が取っているコンピューターサイエンスコースのリアルタイム戦略ゲームを開発しています。それのより難しい側面の1つは、クライアントとサーバーのネットワーキングと同期であるようです。このトピック(1500人の射手を含む)を読みましたが、他のモデル(たとえばLAN経由)とは対照的に、クライアント/サーバーアプローチを採用することにしました。 このリアルタイム戦略ゲームにはいくつかの問題があります。ありがたいことに、プレーヤーが行うすべてのアクションは決定論的です。ただし、スケジュールされた間隔で発生するイベントがあります。たとえば、ゲームはタイルで構成されており、プレイヤーがタイルを取得すると、そのタイルの値である「エネルギーレベル」は取得後1秒ごとに増加します。これは、私のユースケースを正当化する非常に簡単な説明です。 現在、サーバーにパケットを送信して応答を待つシンクライアントを実行しています。ただし、いくつかの問題があります。 プレイヤー間のゲームがエンドゲームに発展すると、毎秒50を超えるイベントが発生することが多く(前述のスケジュールされたイベントにより、蓄積されます)、同期エラーが発生し始めます。私の最大の問題は、クライアント間の状態のわずかな逸脱でさえ、クライアントが異なる決定を意味する可能性があり、それが完全に別個のゲームに雪だるま式になるということです。もう1つの問題(現時点ではそれほど重要ではありません)は、待ち時間があり、結果を確認するために移動してから数ミリ秒、さらには数秒待つ必要があることです。 これをエンドユーザーにとってより簡単に、より速く、より楽しくするためにどのような戦略とアルゴリズムを使用できるのだろうかと考えています。これは、1秒あたりのイベント数が多く、ゲームごとに複数のプレイヤーがいることを考えると、特に興味深いものです。 TL; DRが1秒あたり50イベントを超えるRTSを作成している場合、クライアントを同期するにはどうすればよいですか?

2
Quake 3のような精密なネットワークゲームでサーバーとクライアントのクロックを同期させる方法は?
私は2Dトップダウンシューターに取り組んでおり、Quake 3のようなネットワークゲームで使用されるコンセプトをコピーするために最善を尽くしています。 信頼できるサーバーがあります。 サーバーはクライアントにスナップショットを送信します。 スナップショットには、タイムスタンプとエンティティの位置が含まれます。 スナップショット位置間でエンティティが補間されるため、動きがスムーズに見えます。 必要に応じて、エンティティの補間は「過去に」わずかに行われるため、複数のスナップショットを補間します。 私が直面している問題は「クロック同期」です。 わかりやすくするために、サーバーとの間でパケットを転送する際のレイテンシーがゼロであると少しの間ふりをしましょう。 サーバーのクロックがクライアントのクロックより60秒進んでいる場合、スナップショットのタイムスタンプはクライアントのローカルのタイムスタンプより60000ミリ秒進んでいます。 したがって、クライアントのクロックが追いつくのに時間がかかるため、エンティティスナップショットが収集され、クライアントが特定のエンティティが移動するのをクライアントが見るまで約60秒間待機します。 スナップショットを受信するたびにサーバーとクライアントのクロックの差を計算することで、この問題を克服することができました。 // For simplicity, don't worry about latency for now... client_server_clock_delta = snapshot.server_timestamp - client_timestamp; エンティティが補間にどの程度沿っているかを判断するとき、単にクライアントの現在の時間に差を追加します。ただし、これに関する問題は、スナップショットが他のクロックよりも速く/遅く到着するために2つのクロックの差が突然変動するため、ジャーキネスが発生することです。 知覚可能な遅延が補間のためにハードコードされている遅延と、通常のネットワーク遅延によって引き起こされる遅延のみであるように、クロックをどのように密接に同期できますか? 言い換えると、ジャーキネスを導入せずに、クロックが大幅に非同期化されたときに、補間の開始が遅すぎる、または早すぎるのを防ぐにはどうすればよいですか? 編集:Wikipediaによると、NTPを使用して、インターネット上のクロックを数ミリ秒以内に同期できます。ただし、プロトコルは複雑に思えますが、おそらくゲームで使用するには過剰ですか?

3
クライアントとサーバーの両方を同時に効率的にコーディングするにはどうすればよいですか?
クライアントサーバーモデルを使用してゲームをコーディングしています。シングルプレイヤーでプレイする場合、ゲームはローカルサーバーを起動し、リモートサーバー(マルチプレイヤー)のようにローカルサーバーと対話します。これは、シングルプレイヤーコードとマルチプレイヤーコードを別々にコーディングしないようにするためです。 コーディングを始めたばかりで、大きな問題に遭遇しました。現在、私はすべてのゲームクラスをパッケージに編成して、Eclipseでゲームを開発しています。次に、サーバーコードで、クライアントパッケージのすべてのクラスを使用します。 問題は、これらのクライアントクラスにはレンダリングに固有の変数があり、これは明らかにサーバーでは実行されないことです。 サーバーで使用するクライアントクラスの修正バージョンを作成する必要がありますか?または、クライアント/サーバーがそれを使用しているかどうかを示すために、ブール値でクライアントクラスを変更するだけです。他にオプションはありますか?サーバークラスをコアクラスとして使用し、レンダリングクラスで拡張することについて考えただけです。

2
ゲームのファイル全体を自動的に更新するにはどうすればよいですか?
プレーヤーのゲームアセットと実行可能ファイルを自動的に更新する方法を教えてください。更新ソフトウェアは無料であることが望ましいです。更新はサイズが小さく、CPU時間を無駄にしないようにする必要があります。また、更新サーバーを簡単に実行して新しいバージョンを作成するか、ロジスティックに作成する必要があります。 私のユースケースは、大規模なオンラインクライアントなどでのプレーヤーゲームバージョンの更新、分散ゲームのテスト、さらには通常のゲームの実行です。

3
サーバーサイドプログラミングを統一して行えますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 6年前に閉鎖されました。 私の最後の質問に対する別の考え。unity3dでクライアント/サーバーゲームを行う場合、unityでサーバーサイドプログラミングを行うことができますか?そうでない場合、C#.netを使用できますか?そうでない場合、C ++で使用できるパッケージまたはlibがありますか?通信は単なる生のソケットですか?

4
ソケットサーバーとゲームサーバーを別々のプロセスにする必要がありますか?
単純な標準のクライアント/サーバーゲームを想定しています。サーバーの場合、クライアントからの接続とメッセージをリッスンし、ローカルソケットまたはstdinを介して実際のゲームサーバーを実行する別のプロセスにデータを送信する別のプロセスを用意する価値がありますか? 他のオプションは、両方のことを単一のプロセスで実行することです。着信メッセージをキューに入れ、正しい順序で実行することで、問題が停止することはありません。 2つの「アクティビティ」を分離するための追加リソースが実際に価値があるかどうか疑問に思っています。どのように決定すればよいですか?賛否両論を聞きたい。

3
ソケットを介してn個のクライアントと通信するターンベースのサーバーを記述するパターンはありますか?
私は、ゲームをプレイするTCPソケットネットワーククライアントの任意の数のゲームを管理する汎用ゲームサーバーで作業しています。ダクトテープでハッキングされた「デザイン」が動作していますが、壊れやすく柔軟性に欠けています。堅牢で柔軟性のあるクライアント/サーバー通信を作成するための確立されたパターンはありますか?(そうでない場合、私が下にあるものをどのように改善しますか?) 大体これがあります: ゲームのセットアップ中、サーバーには、クライアントからの同期リクエストとサーバーからの応答を処理するプレーヤーソケットごとに1つのスレッドがあります。 ただし、ゲームが開始されると、1つのスリープを除くすべてのスレッドと、そのスレッドが(逆の要求と応答で)移動について通信しながらすべてのプレイヤーを1つずつ循環します。 ここに私が現在持っているものの図があります。クリックして拡大/読み取り可能なバージョン、または66kB PDFをクリックします。 問題点: プレイヤーは、正確に正しいメッセージで順番に応答する必要があります。(私は各プレイヤーにランダムながらくたに応答させ、彼らが有効な動きを与えてから先に進むことができると思います。) 順番が来ない限り、プレイヤーがサーバーと会話することはできません。(サーバーに他のプレーヤーに関する更新を送信するように指示することはできますが、非同期要求は処理しません。) 最終要件: パフォーマンスは最優先事項ではありません。これは、主に非リアルタイムゲームに使用され、主にAIを相互にピッチングするために使用され、けいれん的な人間には使用されません。 ゲームプレイは常に(非常に高い解像度であっても)ターンベースになります。他のすべてのプレイヤーがターンを取得する前に、各プレイヤーは常に1つの動きを処理します。 サーバーの実装はたまたまRubyで行われます(違いがある場合)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.