2012-03-29 3 views
2

Node.jsとSocket.ioで大規模なマルチプレイヤーゲームを構築しています。すべてのプレイヤーは同じ無限の地図上を移動します(Minecraftと思う)。プレイヤーが動くにつれて、私は彼らに見えるタイルをロードします。プレイヤーが自分の動きを動かすときには、それらを見ることができるすべてのプレイヤーに送信する必要があります。マルチプレイヤーでソケットを管理するSocket.io Game

私の質問は、私のソケットの構造についてはどうすればいいですか?すべてのプレイヤーのために1つのソケットを持つことは、規模が変わるようには見えません。私は世界を塊に分けることができますが、塊の境界をどのように管理するかはわかりません。ほとんどのプレイヤーはほとんどの時間を見ることができないので、各プレーヤーのソケットは、それらに関連するアップデートだけを取得することをお勧めします。

私は、Socket.ioには、同じメッセージを受け取るソケットだけである「部屋」の概念があります。近くに移動する他のプレイヤーのソケットを追加するために、接続された各プレイヤーに別々の部屋を用意することは可能でしょうか?プレーヤーが動くたびに、その部屋にメッセージを送ることができました。視聴者が退室したり入室した場合、どのように管理できますか?

明らかにこれはあいまいな質問ですが、私はベストプラクティスアドバイスを探しています。件名に関する記事へのリンクは高く評価されます。

+1

[Quadtrees](http://en.wikipedia.org/wiki/Quadtree)を使用してプレーヤーの場所を検索したことがありますか?これにアプローチする方法を探すのに適した場所は、[BrowserQuest source](https://github.com/mozilla/BrowserQuest)です。 – hughsk

答えて

3

これは、MMOサーバを設計する上で不可欠な問題の1つです。一般的にクライアントごとにソケットが必要で、ロジックを実装するとクライアントを特定の地域に予約します。

リージョンは、データサブスクリプションを制御するための「チャネル」を設定するための良い方法です。あなたは地域ごとに別々の名前をつけて、Socket.ioルームを使って選手を地域に加入させることができます。

結局のところ、このようなことはやる気がなくなります。したがって、プレーヤーが特定の地域を移動する場合、サーバーはすべて、イベントのXメートル以内のすべての地域のすべての加入者にその「Player Moved」イベントを送信するだけです。

+0

「クライアントごとのソケット」とはどういう意味ですか?クライアントごとに1つのwebsocketサーバ(つまり、クライアントごとに異なるIPまたはポート)、または同じサーバのIP /ポート内のクライアントごとに1つの接続ですか?私はラチェットと同じ問題を抱えています。 –

関連する問題