タグ付けされた質問 「networking」

情報交換の目的でケーブルバインドまたはワイヤレス通信リンクを介して接続された2台以上のコンピューター。

1
同じプロセス内でサーバーとクライアントの両方を実行する
質問 Lidgrenとネットワーキングを初めて使用し始めたばかりで、同じプロセス内でサーバーとクライアントの両方を実行することが可能であることに気付きました。 何らかの理由でこの習慣は推奨されませんか? 環境 私が尋ねている理由は、この概念によって、シングルプレイヤーモードとマルチプレイヤーモードの両方を同じものとして扱うことができると理論的に考えたからです。これは非常に役立ちます。 私の考えに従って、これは私が考えていたディストリビューションです: シングルプレイヤー-同じプロセスで1つのサーバー+ 1つのクライアント。通信速度はどれくらいですか? マルチプレーヤー-ホストのシングルプレーヤー+ 他の各プレーヤーの1つの追加クライアントと同じです。 私が描写している実行フローは、クライアントがユーザー入力を受け取り、サーバーに通知を送信するためのものです。次に、サーバーはそれを検証し、すべてのクライアントによって実行されるアクションをブロードキャストします。クライアントが1つ(つまり、シングルプレイヤー)であっても、複数のクライアント(つまり、マルチプレイヤー)であっても、問題にはなりません。

3
軽量のLANピア発見のためのソリューション?
純粋にクロスプラットフォームプログラミング用のライブラリを構築しました。それで作られた私のゲームは、Android、PC、Linux、Macなどでうまく動作します。 ネットワーキング機能はENETライブラリによって提供されるため、アプリ間のすべての通信はTCPまたはUDP互換ではなく、カスタムプロトコルのみで行われ、最終的にはUDPに基づいたものでさえ困難です。 私がENETでやりたいことができるとは思えないので、ここで助けを求めます! Androidフォン、ラップトップ、PCで同じゲームを実行しているとしましょう。Wifiホットスポット(?)でも家庭用ルーターでも、それらはすべて同じwifiネットワーク内にあるため、LAN内にあります。 ネットワーク内の他の2つを検出するには、これら3つのピアがそれぞれ必要です。これは、LANネットワークで生きているアプリのIPを見つけて、それらの間でマルチプレイヤーゲームをホストできるようにすることのみを目的としています。 これを行うには、UDPブロードキャスト、応答待機の1つの効果的な方法しか考えられませんが、それが解決策である場合は、実装の唯一の目的であるため、小さなものが必要です。 他の方法は、LANアドレスのサブ範囲内のすべてのIPに接続しようとすることですが、これはOSが私と一緒にいるとは思いません:p

4
数百人のプレイヤーによるサーバー側の物理シミュレーション
私は現在、物理をサーバー側でシミュレートしたいシングルプレイヤーの物理指向のゲームに取り組んでいます。これは、ゲームにリーダーボード、永続的なプレーヤーの進行状況などがあり、あらゆる種類の不正行為を防止したいためです。基本的には純粋なクライアントサーバーアーキテクチャであり、クライアントは「ダム」であり、サーバーが表示したいものだけを表示します。 しかし問題は、ゲームがおそらく数百人(おそらく数千人)の人々によって同時に行われることです。何百もの状態を同時に維持する必要がある場合、サーバーの処理能力が失われる可能性が最も高いため、これは私に関係しています。 すべての物理シミュレーションをクライアント側に移動しても問題はありませんが、クライアントシミュレーションの結果が有効かどうかを検証する方法が本当に必要です。しかし、私にはその方法がわかりません。 シミュレーションサーバー側をときどき実行して、クライアントがまだ公平に機能しているかどうかを検証することを考えましたが、サーバーにできるだけ負担をかけないようにしたいのです。 物理学は、Glenn FiedlerによるGDC 2011デモとほぼ同じくらい複雑になるでしょう。ただし、常に衝突するリジッドボディが1つのシーンに含まれ、すべてが同時に表示されます。 Web上のほとんどのリソース(ここでも、Glenn Fiedlersサイトは素晴らしいものです)が小規模なネットワーク化された物理学(Haloのような30プレイヤーのFPSなど)について話すので、私はこの特定のケースへの回答を得るのに苦労しています。 この件に関するアドバイス、ウェブサイト、論文などは非常にありがたいです。 私が回答したい質問の要約: クライアントサーバーモデルはどの程度実現可能ですか?サーバーの処理能力に関する懸念は正当で根拠がありますか? サーバー上のクライアントによって実行される物理シミュレーションを確実に検証することは可能ですか?もしそうなら、どうですか?


3
マルチプレイヤーゲームでIDのなりすましを防ぐにはどうすればよいですか?
クライアントがIPアドレスを偽装し、他のクライアントをだましてサーバーにだましていることを考えています。そのようなもの。(私はこれについてあまり知らないので、これが完全に間違っている場合は、私を修正してください。) これを防ぐにはどうすればよいですか?リアルタイムゲームなので、暗号化を使用する場合は、RC4のような高速で安全なものを使用します。サーバーがクライアントに提供するキーでパケットデータを暗号化する必要がありますか? 違いがある場合は、UDPを使用しています。

2
オンラインマルチプレイヤーゲームの基本[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 6年前休業。 現在、c#オンラインマルチプレーヤーゲームにリアルタイムで取り組んでいます。目的は、UDPプロトコルを使用してクライアント/サーバーベースの接続を確立することです。これまでのところ、サーバーに接続されているすべてのプレーヤーにデータが届くようにする必要があるため、プレーヤーの動きにはUDPを使用し、イベント(プレーヤーの射撃、プレーヤーの命を失う)にはTCPを使用しました。UDPは「信頼できない」と言われ、一部のパケットが失われる可能性があることを知っています。しかし、接続に影響を与える可能性があるので、TCPとUDPを混在させないようにあらゆる場所を読んでいます。 主な質問は、ネットワークをどのように整理すればよいかということです。 UDPはコネクションレスですが、誰が誰であるかをどのように保存すればよいですか?クライアントのIPアドレスをリストに保存する必要がありますか? 重要なイベントにTCPを使用するか、UDPを使用する必要がありますか?UDPを使用する必要がある場合、データが失われないようにするにはどうすればよいですか? TCPとUDPの両方を使用することで、各プレーヤーのIPをリスト(UDPの場合)と別のリスト(UDPの場合)に接続されているTcpClientに保存する必要があります。どうすればより効果的に変更できますか?

2
シームレスMMOサーバーアーキテクチャに関する情報
シームレスMMOサーバーで何か資料を探しています!「Massively Multiplayer Game Development」の本と「Game Programming Gems 5」にいくつかの記事があります。そのトピックについて誰かが経験したり、それについての記事を知っていますか? 「ハイレベルビュー」と実装に興味があります。これが修士論文のテーマになるかもしれませんが、実際に論文を書き始める前に、そのようなシステムを書くのがいかに難しいかを知りたいと思います。今のところ、どの言語を使用するか決めていません。JavaかScalaを考えています。Erlangを選択することもできますが、私はこれで作業したことがありません。 注:基本的な要件は移動です。他のゲームシステムはオプションであり、「ボーナスクレジット」を提供します。 ここで、「シームレスサーバー」とはどういう意味ですか。静的な境界を使用して、すべてのノードがゲームの世界の一部を制御するサーバークラスターを設定します。プレイヤーは、インスタンスを切り替えたり、「テレポーター」を打ったりすることなく、世界の一端から他の端に移動できるようになりました。WoWがそうだと思います。しかし、私のバックエンドでは、プレイヤーはあるサーバーから次のサーバーに移行します。

2
帯域幅を低く保つためのMMO技術、アルゴリズム、およびリソース?
現在のMMOがアクションと移動データを圧縮からクライアントでの処理にどのように処理するかに関するリソースとドキュメントはありますか?動き予測アルゴリズムのリソースはありますか? 私はwsadの動きがあり、レイテンシを低く保つことに重点を置いているものに特に興味があります。また、さまざまなタイプのMMO(ネットワークに関して)のパケットレートとサイズは何ですか。 プレーヤーが到達できない場合、または後でパケットを確認できない場合に、パケットレートをスケーリングしたり、一部のパケットを完全に無効にする方法はありますか?

3
MMORPGのUNITYにおけるネットワークと動き
BeamServer2 DLLを使用してC#で専用サーバーをプログラミングしています。最初は、他のプレイヤーがすでに作成したOmuniマップ上で動くのを見たいと思っていました。これは、フレームごとにサーバーに自分の位置を送信することで行いました。これはうまくいき、私は数人の友達と遊ぶことができましたが、運動は遅れがありませんでした。そこで、サーバーが他のクライアントに到達するのを妨げることなくサーバーが誤った位置を送信できないように、動きの平滑化といくつかのセキュリティを追加しようとし始めました。 私がやったのは、remotePlayerにMovementControllerを持つmasterClientを作成したことです。クライアントが移動したいときは、ローカルに移動し、移動する方向を示すメッセージをサーバーに送信します。その後、サーバーは速度を取り、それをmasterClientに送信します。masterClientは、remotePlayerが自分自身を移動するように、remotePlayerを移動します。彼が動くのをやめると、彼は自分の位置を入れたメッセージを送ります。次に、マスタークライアントは、自分が来た位置がクライアントからの位置と同じくらい近いかどうかをチェックします。サーバーのクライアントの位置にサーバーを置いたクライアントのpingに従って現実的な場合は、 これは機能しますが、まだ問題があり、これを修正する方法がわかりません。クライアントの動きをスムーズにする必要がありますが、自分の位置に(x / 2、y / 2、z / 2)をたたきつけて、次のフレームで実際の位置に置くことができることに気付き、失敗しました。すぐに再試行します。それが追加されても、遅延が修正されているかどうかはわかりません。 他のテクニック、提案、質問、...?ありがとう、ディーデ。
8 c#  networking  mmo  unity 

6
選択するサーバープラットフォーム[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 5年前休業。 これらの要件を備えたオンラインマルチプレーヤー用のサーバーを作成します。 完全にサーバー上でプレイされる非常にシンプルなターンベースのゲーム(カードゲームを考えてください)(セキュリティ上の理由) テーブルごとに4人のプレーヤーで複数のゲーム(テーブル)を実行できる必要がありますが、ロビーシステムは必要ありません(別のサーバーが処理します) できるだけ多くのプレーヤーを同時にサポートできます。複数のサーバーが必要になる場合があります プレイヤー間でチャット Flash / AIRクライアントへのソケット接続 他のサーバーと通信できる必要があります(プレーヤーアカウントなど) 今、私は2つのオプションを考えています: Smartfox(または同等のもの) TomcatなどのカスタムJavaソリューション Smartfoxを選ぶ理由 複数の部屋を処理し、ネイティブでチャットします おそらく、よく知られているマルチプレイヤーゲームの問題の解決策があります。 なぜカスタム? Smartfoxには多くの不要な機能があり、パフォーマンスが悪い SmartfoxはXMLベースのフォーマットと通信するため、より効率的なバイナリフォーマットを使用できます。 Smartfoxの拡張メカニズムを使用して、サーバーでゲームモデル全体を実行するのが便利かどうかわからない 複数の部屋とチャットは簡単に再実装できます Tomcatまたは軽量コンテナはSmartfoxよりも展開が簡単です Tomcatでの開発のためのより良いIDEサポート(自動デプロイなど) どう思いますか?私の仮定は正しいですか?追加するものはありますか?どのオプションを選択する必要がありますか(または完全に別のオプションを選択する必要があります)?

5
Flashゲームのネットワーキング。ソケットかストラタスか?
ネットワーク通信を使用するFlashゲームのプロトタイプに取り組んでいます。マルチプレイヤーゲームになるため、ピア2ピア接続を使用することをお勧めします。 誰かがストラタスを使用したり、組み込みのソケットを介してマルチプレイヤーゲームを作ったりしたことはありますか? ゲームはターンベースのゲームで、ポーカーと同じくらいの速度ですが、もし私がより速いターンを得ることができればそれは素晴らしいでしょう。

1
(Unity)多くの移動オブジェクト用に最適化されたネットワーキングソリューション
私は現在、かなり野心的なプロジェクトに取り組んでいます。要するに、それはバクテリアの力学を持つリアルタイムのマルチプレイヤー戦略ゲームです。 基本的に、私は環境内に2人のリモートプレイヤーがいて、彼らはバクテリアのようなユニットをスポーンさせて、お互いに攻撃して増殖し、リソース制限に達するまで自分自身を複製することができます。これにより、約200以上のゲームオブジェクトが画面にレンダリングされ、それぞれに独自の状態と動きがあります。これは悪いように聞こえますが、ボットに対するローカルのゲームプレイは実際には非常に優れており、私はそれを非常に高性能にすることができました。 ただし、このゲームをネットワーク化しようとすると問題が発生します。私はすでにこのガイドに従ってこの機能を実装しようとしました:http : //www.paladinstudios.com/2013/07/10/how-to-create-an-online-multiplayer-game-with-unity/ これにより、最高のレイテンシであっても、非常に遅く、不快なゲーム体験が生成されます。これはおそらく、数百のユニットの移動データを送信する必要があるために発生します。 私が提起している質問: 2つのクライアント間の多くの移動ユニットのネットワークと同期を最適化するにはどうすればよいですか? これを行う方法の1つはすでに考えました。ユニットをスポーンした後、何かに当たるまで一方向にのみ移動します-おそらく、ユニットがスポーンされたときと、別のオブジェクトと相互作用したときにのみ同期できますか?これには多くのメリットがありますか?これを実装する理想的な方法は何ですか? 回答ありがとうございます!

4
状態の差分(デルタ)と信頼できない接続の送信
私たちはリアルタイムのマルチプレイヤーゲームを構築しています。このゲームでは、各プレイヤーがゲームループの反復ごとにその状態を報告する責任があります。 状態の更新は、信頼できないUDPを使用してブロードキャストされます。 状態データの送信を最小限に抑えるために、デルタ(変更された状態データに関係なく)のみを送信するシステムを考え出しました。 ただし、パケットが失われると他のプレイヤーがデルタを受信できなくなり、ゲームが予期しない動作をするようになるため、この方法には欠陥があります。 例えば: 状態は次の要素で構成されていると想定します:{positionX、positionY、health} Frame 1 - positionX changed --> send a packet with positionX only. Frame 2 - health changed // lost ! Frame 3 - positionY changed --> send a packet with positionY only. //他のプレイヤーは健康状態の変化について知らない。 では、どうすればこの問題を克服できるでしょうか?データ全体を送信することは常に可能であるとは限りません。

1
OpenGLで頂点を描画する最も効率的な方法
私はOpenGL 3Dゲームを書いています。地形や使用中のオブジェクト用の多数の三角形があります。 私はOpenGL公式ガイドから勉強していて、最初に提示された方法は、描画したい各頂点のglVertex後に関数を呼び出すglBeginことです。 ただし、何千もの三角形を描く必要がある場合、この方法はかなり古くて非効率的です。各フレームで変化しない情報をグラフィックカードのメモリに保存する方法があるので、各フレームをレンダリングすると、その情報はすでにそこにあります。より「不安定な」情報については、おそらくフレームごとに新しい頂点データを送信する必要があるため、別の手法の方が効率的かもしれません。 私の質問に来ます:頂点情報をハードウェアに送信し、レンダリングするための指示を与えるために使用される最も近代的で効率的なOpenGL関数と技術の明確な説明をお願いします。 フレーム中にめったに変化しない頂点データをレンダリングするための順序を送信するための最良の方法とOpenGLツールは何ですか(私は地形とオブジェクトについて考えます)、フレーム中に大きく変化する頂点データを送信するための最良の方法は何ですか?

3
サーバーがタイルベースの領域のみをクライアントに送信することは可能ですか?
はじめに、私はネットワーキング(ハードウェア、ルーターなど)については十分な知識を持っていますが、ネットワークプログラミングの基本的な知識はほとんどありません。これは馬鹿げた質問のように思えるかもしれませんが、自分のゲームでのマルチプレイヤーの実装を理解しながら、自分が何に興味を持っているのかを知りたいのです。 シンプルな2D配列によって生成されるタイルベースの世界を作成しています。簡単にするために、World [100] [100]のようなものを考えてみましょう。 現在、renderメソッドは、ウィンドウの解像度と1つのタイル(移動中のスムーズなレンダリング用)に基づいてタイルのみをレンダリングします。世界がどれほど大きい場合でも(10x10、1million x 1million)、レンダリングのパフォーマンスは完璧です。 ゲームプレイでは、現在表示されているもの(画面+1にレンダリングされたもの)と、おそらくプレーヤーの周囲の領域にあるタイルのいくつかの情報を知るだけです。 したがって、サーバーから送信されるものはすべて、完全なタイル情報にはなりません。例 地面、地面のタイプ、木などの上に置かれるアイテムは、プレーヤーの視野の外側の領域では重要ではなく、クライアント/プレーヤーがそれらのタイルについて知っておく必要があることだけです。(例:プレーヤー[キャラクターまたはプレーヤー]がレンダリングビューのタイルを超えていることをプレーヤーが知ることができるUltima Onlineの「着信名」。) 私はネットワーキングについてあまり知らないので、おそらくこれを知って、これが私の質問に答えるかもしれません。しかし、これが実現可能な解決策なのか、あるいはアイデアが単に笑えるものなのか、私は興味があります。 送信される情報は、タイルの約10x15の領域であり、各タイルはタイルの内容に関する情報を保持します。より効率的には、すべてがオブジェクトであり、タイルはタイル上のすべてのオブジェクトを保持します。例 Tile [4] [4]は、Sword#23452、Rock2、Tree5、Player3、Monster4を保持します。 初期化/ロード中にまだロードされていない場合、空のタイルは地形タイプ[草、砂、水]のみを送信します。一部のタイルには、少数のオブジェクトがあります[Tree2、Sword#924、Gold、Corpse、Rock3]。 したがって、クライアントが主にロードする必要のあるテクスチャとそれを画面に配置するために配置する必要があるため、タイルがサーバーからクライアントに送信する情報が非常に多いとは思えません。クライアントにレンダリングするように指示するファイルのリストでは、位置は2つの整数のみであり、テクスチャは1つの整数です。 最悪の場合、サーバーは150個のタイルに少数のオブジェクトOnLOADの情報のみを送信し、それ以降は更新によってタイル(存在する場合)と新しいタイル(プレーヤーが方向に移動するたびに10から15)への変更のみを送信します。 )と画面上のキャラクターの移動方向(クライアントがタイル間のスムーズな移動をシミュレートできるようにするため)。 これはインターネットまたはピア間で送信される信じられないほどの量の情報であると私は思っているので、私は正しいと思います。それとも、ネットワーキングについてあまり知らないので、ようやくマルチプレーヤーネットワーキングに関する本を開くことに取り掛かったとき、私の心は打たれるでしょうか。 クライアント/サーバー間で送信される情報の量が非常に少ない場合、初期化時に全世界を単にロードする方が理にかなっていますか?または、世界が大きすぎる場合は「マップ」。そして、LOADの後、更新されたタイルのみを送信しますか? どうすれば具体的なデータの扱い方を考えているのか。私が参照として使用している本では、オブジェクトを追加および削除するリンクリストが必要なので、すべてがboolです。「キャラクターはいる?木はある?」 オブジェクトを保持するコンテナーや、レンダリングするものをクライアントに伝えるために必要なものだけを送信するサーバーロジックなど、別のアプローチを考えていました。おそらくそれ自体の内部にネットワーク情報を保持するオブジェクトがあり、サーバーから呼び出されたときに送信されます。

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