JavaScriptでマルチプレイヤーを処理する方法は?


12

私は、モバイルマルチプレイヤーゲームに使用する技術について少し研究しています。

これは現在のところ実験であるため、現時点では、プレーヤーが注意する必要があるのは他のプレーヤーだけです。

これがゲームではなく典型的なWebアプリケーションである場合、常にHTTPリクエストが発生するだけです。しかし、これはゲームであるため、パフォーマンスと精度が問題になります。

ゲームは複数の電話プラットフォームを対象としているため、クライアントはJavaScriptまたはJavaScriptベースのフレームワークで記述されるとしましょう。サーバー技術は完全にオープンです。

各プレーヤーは、HTTPポストと同等のものを作成し、より高速なプロトコルのみを使用する必要があります。マルチプレイヤーがWebベースである理由は、Bluetoothまたは他のローカルネットワークを介したマルチプレイヤーがプラットフォーム間で多様すぎて問題を引き起こす可能性があるためです。

それでは、質問は、JavaScriptマルチプレイヤーに使用するのに適したプロトコル/テクノロジーとは何でしょうか?サーバー側のものに関するアドバイスやそれは重要ですか?この2層アーキテクチャを削除して、電話と電話を直接接続する必要がある理由は何ですか?

回答:


15

HTTPよりも優れた通信プロトコルが必要です。おそらくUDPまたはTCPが必要でしょう。ブラウザにはUDP通信を行う方法がないため、唯一の選択肢はTCPです。

TCPの場合、WebSocketを使用する必要がありますが、ブラウザのサポートはwebsocketでは不安定です。

これは、COMETテクニックを使用してTCPをエミュレートする必要があることを意味します。一般的なエミュレーションの1つは、フラッシュアプ​​リケーションに埋め込まれたWebソケットです。

Socket.IOは、websocketをサポートし、非準拠のWebブラウザーで適切なフォールバックでそれらをエミュレートするライブラリ(node.js用)です(フラッシュおよび他のCOMETテクニックを使用します)。

マルチプレイヤーJavaScriptゲームの場合、socket.ioとnode.jsの使用をお勧めします


1
以下は、HTML5とWebSocketsで作成されたリアルタイムゲームのサンプルです:rawkets.com。ソースコードはここにあります:github.com/robhawkes/rawkets
Elisée

1
ここにある2つの 以上の例
レイノスは

4

質問と受け入れられた答えの両方が2011年に公開され、以来、時間はかなり変わっています:)

Websocketは非常に普及していますが、さらに優れた技術は、信頼性の低いUDPストリームを可能にするWebRTCです。これらは、ゲームにとってはるかに優れています。

通信以外にも、ゲームの状態の調整、クライアント側の予測、シリアル化など、マルチプレイヤーゲームを作成する際に克服する必要がある他の多くの障害があります。

<shameless self promotion>

私は、前述の多くの問題(および他の多く!)を解決したnode.jsに基づくマルチプレイヤーゲームサーバー/ライブラリであるlance.ggの元の開発者の1人です。私たちの目標は、JavasScriptゲーム開発者にとってマルチプレイヤーゲームの開発を容易にすることです。私はあなたのゲームを作るための出発点としてそれを使用することを心から歓迎します。

</shameless self promotion>


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