2017-05-20 16 views
-2

agar.iogenerals.ioのようなブラウザのゲームには、リンクに関連付けられたプライベートゲームルームを作成できる機能があります。他のプレイヤーは、ブラウザの同じリンクにアクセスして部屋に参加することができます。この機能はどのように機能し、Socket.ioとNode.jsを使ってそれを複製できますか?Node.js/Socket.ioで部屋を生成する

+0

はい、できますし、socket.ioウェブサイトにはその例があります。どちらがとてもシンプルなのですか?なぜここに尋ねる必要がありますか? – Shaharyar

答えて

0

この一部は、"chat" example on the socket.io siteでカバーされています。この作業には複数の部分があります。

  1. ユーザーを特定の名前のチャットルームに配置します。
  2. 別のユーザーが既存のチャットルームを表示し、そのルームに参加することをサーバーに知らせる何かをクリックするためのユーザーインターフェイスを作成します。
  3. 特定のチャットルームへの参加を希望するユーザーを処理するサーバー要求ハンドラを作成します。
  4. 参加した部屋でチャットするユーザーインターフェイスを作成します。
  5. サーバー上でチャットテキストを受信すると、そのチャットルーム内の他のすべてのユーザーにチャットテキストを送信します。

socket.ioでは、サーバーはsocket.io接続を部屋に配置します。 socket.join(roomName)を呼び出すと、socketはあなたが部屋に入れたいユーザーのsocket.io接続です。ユーザーが自分の部屋を作成できるようにするには、部屋名を指定してからサーバーにチャットルームを開始するリクエストを送信する必要があります。サーバーはsocket.join(roomName)を呼び出し、そのチャットルームが自動的に作成されます。他のユーザーにその部屋があることを知らせたい場合は、作成したすべてのメッセージをすべてのユーザーにブロードキャストして、接続されたすべてのユーザーに新しい部屋が作成されたばかりであることを通知する必要があります。これは、通常のようなものをやっているでしょう:

io.emit('newRoom', roomName); 

そして、すべてのユーザーがnewRoomメッセージをリッスンしなければならないであろう。

次に、既存のすべてのルームを表示するためのユーザーインターフェイスがあると仮定すると、クライアント接続がサーバーに送信して、特定のルーム名に参加することに興味を示す別のメッセージを作成する可能性があります。

io.emit('joinMeTo', roomName); 

サーバは、各クライアントソケット上joinMeToメッセージを聞くと、それを処理します:

socket.on('joinMeTo', function(roomName) { 
    socket.join(roomName); 
}); 

いくつかの詳細は上記参照チャットのデモです。あなたが特定のステップで立ち往生した場合は、より具体的な質問をすることができます。

+0

ありがとう!私は名前空間を使用しようとしていますが、部屋がうまくいくように思えます。 –

+0

@SimonHuang - ええ、名前空間はチャット型の機能性のためのものではありません。ネームスペースはあらかじめ定義された情報チャンネルに似ており、希望のチャンネルに接続することができます(ケーブルテレビチャンネルのように思っています)。あなたは通常、ルームでのやり方とは違って、名前空間を動的に作成しません。 – jfriend00

関連する問題