Node.jsのリアルタイムマルチプレイヤーゲームの設計原則


12

私は、クライアント/サーバーゲーム内プロトコルの設計と最適化におけるレイテンシ補償方法と呼ばれるYahn Bernierの2001年の論文から改編されたマルチプレイヤーネットワーキングに関する Valveの記事を読んでいます。socket.ioを介してクライアントに接続されたnode.jsサーバーを使用してリアルタイムのマルチプレイヤーゲームを作成していますが、以下に詳述する原則に関していくつか質問があります。

エンティティ補間

[補間]は、サーバーの更新をバッファリングし、それらのギャップをスムーズに補間して再生することにより、これが通常もたらす不安定な動きを防ぎます。また、パケット損失によるグリッチから保護することもできます。

クライアント側の予測

予測とは、サーバーが確認するのを待たずにローカルプレーヤーのアクションの効果をクライアントが予測するという概念です。エンティティの予測状態は、一致または不一致が検出されるまで、サーバーコマンドが到着するたびにサーバーコマンドに対してテストされます。

遅れ補償

ラグ補正は、コマンドが送信されたときにプレーヤーが見たものを見るために、[ユーザー入力]を処理するときにプレーヤーの待ち時間を使用してサーバーが巻き戻し時間を使用するという概念です。遅延補償は、予測と組み合わせることで、ネットワークの遅延を攻撃者の観点からほぼ排除する程度まで抑えるのに役立ちます。

  • 原則はUDPに適用されるようにTCPにも適用されますか?また、実装に違いはありますか?エンティティの内挿はパケット損失から保護する必要はないが、それについてはそれが必要であることがわかります。

  • UDPとNode.jsを使用して、サーバーとWebブラウザー間で通信することもできますか?

  • このペーパーは10年以上前のものであるため、これらの原則は現在も使用されていますか、または他の技術が登場していますか?

どんな助けでも大歓迎です。


1
人気の信念に反して、マルチプレイヤーゲームにUDPは実際には必要ありません。最高から学ぶ。WoWはTCPを使用しており、他の多くのAAAマルチプレイヤーゲームもそうだと思います。人々は誰かのアドバイスに従うだけで、その後5か月かけてTCPの悪い低速バージョンを実装します!
jcora

1
(もちろん、UDP上でその利点を活用できる適切なプロトコルを開発するための知識とリソースがあることを確信している場合を
除き

1
TCPを使用するAAA FPSゲームはありません。リアルタイムの更新が必要なゲームには本当に遅すぎます。しかし、彼はアクションゲームを書いていないので、TCPで逃げることができるはずです。
ブレンダンレスニアック

@Yannbane WoWがTCPを使用することを知りませんでした。私が見つけることができるものから、多くのMMOが行うようです。HTML5を使用してマルチプレイヤーゲームを作成することに自信を持ちます。ありがとう!
-dreta

回答:


6
  • 遅延の影響を減らすための原則は、トランスポートプロトコルに関係なく同じです。パケット損失は別のトピックです-多くの種類のパケットでは、次の更新がすでに進行中である可能性があるため、いくつかのパケットを失うことは重要ではありません-ここでUPDには利点がありますが、特定のパケットが配信されることを確認する必要がある場合は、カスタムが必要ですUDPでそれを行う確認コード
  • Node.jsはUDPをサポートしていますが、Webブラウザーはサポートしていません(プラグインなし)。2つの間で通信するための最良のリアルタイム方法は、基本的にTCPであるWebソケットです。ただし、通信にはSocket.IOを使用することをお勧めします。これは、Webソケットをサポートしていないブラウザーのフォールバックを提供します。
  • 原則は同じままです。

1
これは時代遅れだと思います-WebRTCはUDPのような通信を使用する方法であるはずですよね?
ニコライツェンコフ

4

Sven Bergstromがbuildnewgames.comサイトに投稿したHTML5のリアルタイムマルチプレイヤーゲームに関するこの記事をご覧ください。彼は同じことについて話し、Node.JSを使用しています。私自身も似たようなことがあります。私は、残りの部分に取り組む前に、クライアント側の予測と補間などについて自分でもっと研究しています。

Socket.IOとNodeでこれを行うことは間違いなく可能だと思いますが、テクノロジーはまだ新しいので、実装に関するガイドとしてはほとんどドキュメントがなく、ほとんど何もありません。私がやっていることをやって、主題を抽象的な高レベルの用語で非常に詳細に勉強することをお勧めします。


1

テクノロジーはほとんど同じだと思います。また、概念は、使用する言語やUDPまたはTCPを使用するかどうかに依存しません。私はここで全部の非常に詳細な説明を書いたhttp://www.gabrielgambetta.com/fpm1.htmlかなり図を含むが、:)

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