注:これは、ゲームではなくネットワーキングに関する質問です。私はStarCraftを単なる例として使用しています。
ゲームStarCraft(StarCraft 2ではない)はオンラインプレイをサポートしています。1人がホストし、他の人が参加します。ホストがゲーム中に退場した場合、ゲームはホストなしで無期限に続行できます。それはどのように機能しますか?
次のシナリオを検討してください。
- 3対3をホストします。参加できるようにするには、ルーターをポートフォワード6112、TCPおよびUDPに設定する必要があることに注意してください(ブリザードサポートを参照)。
- 5人が参加します。全員(自分も含む)はルーターの背後にいます。ゲームを開始します。
- ゲーム開始から3分後、約20人の熱狂者が私の基地に流れ込みます。誰も私を助けません。
- 私のベースは排除されたので、私は去ります(ゲームはあなたに選択肢を与えません)。
- ゲームはホストなしで続行します(ホームチームには2人のプレイヤーが残っています)。
残りの5つのクライアント(転送された6112を必要としなかった)はどのように接続されたままになりますか?
私が正しく理解している場合:2つのプログラムが互いに通信する場合、1つは「サーバー」であり、ポート上の接続をリッスンする必要があり、もう1つは「クライアント」であり、その接続要求を開始する港。彼らは単純にお互いにパケットを送信し始めることはできません(そして、両方がルーターの後ろにあるなら、私は彼らがどうするかさえ知りません)。
ゲームをホストしている人はサーバーであり、ゲームに参加している人はクライアントです。クライアントがサーバーとの通信を開始する方法を簡単に確認できます。私が取得できないのは、サーバーを経由せずにクライアントがどのように互いに通信を開始するのですか?インターネットプロトコルにより、サーバーはクライアント間の接続を開始できますか?
StarCraftの場合、ゲームのトラフィックがBattle.netサーバーを通過することは完全に可能です。StarCraftは、ゲーム中(友人からのメッセージなど)にBattle.netへの接続を維持します。ただし、ゲームのトラフィックが通過するとは思えません。
私の質問は次のとおりです。複数のクライアントが接続されたサーバーは、それらの間の接続を開始できますか?
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).
どうやらこれは、ユーザーがあなたを見つけることができるようにゲームを開始するために必要ですが、接続を維持する必要はありません。