17. チャットルームに分かれてチャット
前項までで作成したビデオチャットは、サイトにアクセスした人全員が同じチャットに参加しました。
本項では、チャットルームに分かれてチャットができるようにします。
解説
Socket.IO を利用すると「チャットルームに分かれてチャット」を簡単に実現することができます。
指定したルーム名のルームに入室済みの人とシグナリングを行い、ルーム外の人とはシグナリングを行わないようにします。
Socket.IO のルーム機能を活用します。
チャットに参加するときに、シグナリングサーバーでの処理として、指定したルーム名のルームに入室し、"join"を同じルームに入室済みの人に送信するようにします。
準備
「16. 複数人でのビデオチャット」を実施していない場合は、実施します。
サーバー側の処理
「server.js」ファイルを編集します。
- チャット参加時の処理として、「ルームへの入室の処理」を追加し、「"join"を送信元以外の全員に送信」していた処理を、「"join"を同じルームの送信元以外の全員に送信」する処理に変更します。
- チャット離脱の処理を追加します。処理としては、「ルームから退室」処理を記述します。
ウェブページ
「public/index.html」ファイルを編集します。
- 参加画面のユーザー名入力ボックスの下に、ルーム名入力テキストボックスを追加します。
- チャット画面のマイクのOn/Offのチェックボックスの下に、ルーム名表示テキストボックスを追加します。
- 前項でコメントアウトした「リモートのユーザー名、映像、音声のHTML要素」を削除します。
「public/index.html」 の内容を以下のようにします。
クライアント側の処理
「public/client.js」ファイルを編集します。
グローバル変数
「グローバル変数」コード部に、以下のグローバル変数の定義を追加します。
- 「ルーム名を入力」するためのテキストボックス
- 「ルーム名を表示」するためのテキストボックス
「Join」ボタンを押すと呼ばれる関数
「UIから呼ばれる関数」部の「「Join」ボタンを押すと呼ばれる関数」の処理を変更します。
- 入力されたルーム名を取得します。
- ルーム名表示用のテキストボックスにルーム名を設定します。
- 送信データにルーム名を追加します。
「Leave Chat.」ボタンを押すと呼ばれる関数
チャットからの離脱のときには、ルームからの退室を行うために、サーバーにチャットの離脱の通知を送ります。
「UIから呼ばれる関数」部の「「Leave Chat.」ボタンを押すと呼ばれる関数」の処理を変更します。
- 「サーバーに"leave"を送信」の処理を追加します。
コメントアウトの削除
前項でコメントアウトしたコードを削除します。
動作確認
node でサーバーを起動します。
ブラウザを2つ立ち上げ、それぞれのブラウザで「localhost:1337」にアクセスします。
ユーザー名とルーム名を入力する参加画面が表示されます。
同じルーム名を入力した2つのブラウザ間でビデオチャット
インターネットに公開されたサーバーでプログラムを動作させ、同じルーム名を入力した2つの端末間でビデオチャット
ダウンロード
デモ
デモ(Google App Engine) : https://my-video-chat.appspot.com/app17/index.html
デモ(Heroku) : https://myvideochat1234.herokuapp.com/app17/index.html
関連ページ
前項目 : 16. 複数人でのビデオチャット