05. チャットメッセージの送受信

    
    チャットメッセージの送受信ができるようにします。
解説
チャットメッセージの送受信ができるようにするために、以下を行います。
- チャットページHTMLファイルにチャットメッセージの送受信の処理を追加する。 ( chat.html の変更 )
 - WebSocket Consumerにチャットメッセージを受信し拡散する処理を追加する。 ( consumers.py の変更 )
 
準備
04. を実施していない場合は、まず、04. を実施します。
仮想環境への切り替え
仮想環境に切り替えていない場合は、「MyChat」フォルダにて、下記コマンドを実行し、仮想環境に切り替えます。
    
    
    「mysite」フォルダに移動していない場合は移動します。
    
    
これ以降のコマンドの実行は、仮想環境にて実行します。
チャットページHTMLファイルにチャットメッセージの送受信の処理の追加
チャットページHTMLファイルにチャットメッセージ送受信の処理を追加します。
    
    「mysite/chat/templates/chat/chat.html」に、以下の変更を加えます。
- 「Send」ボタンを押した際のイベントハンドラに、onsubmitButton_Send()の呼び出しを追加します。 ( onsubmit="onsubmitButton_Send(); return false;" )
 - グローバルHTMLエレメント変数の定義を追加します。 ( const g_elementXXX = document.getElementById( "XXX" ); )
 - WebSocketオブジェクト変数の定義を追加します。 ( const g_socket = new WebSocket( ・・・ ); )
 - 「Send」ボタンを押したときの処理を追加します。 ( function onsubmitButton_Send(){ ・・・ } )
 - WebSocketからメッセージ受信時の処理を追加します。 ( g_socket.onmessage = ・・・ )
 - WebSocketクローズ時の処理を追加します。 ( g_socket.onclose = ・・・ )
 
「mysite/chat/templates/chat/chat.html」の内容を以下のようにします。
    
WebSocket Consumerにチャットメッセージを受信し拡散する処理の追加
前の項では、WebSocket Consumerの実装クラスの処理として、WebSocketの動作確認用のコードを記述しました。
    WebSocketの動作確認用のコードを、チャットメッセージの送受信のコードに変更します。
    
    「mysite/chat/consumers.py」に、以下の変更を追加します。
- async_to_syncクラスのimport文を追加します。 ( from asgiref.sync import async_to_sync )
 - WebSocket接続時の処理に、グループへの参加処理を追加します。
 - WebSocket切断時の処理に、グループからの離脱処理を追加します。
 - WebSocketからデータ受信時の処理に、受信データをJSONデータに復元し、メッセージの取り出し、グループ内にメッセージを拡散する処理を追加します。
 - 拡散メッセージ受信時の処理を追加します。処理内容としては、WebSocketにメッセージを送信します。
 
「mysite/chat/consumers.py」の内容を以下のようにします。
    
マイグレート
「mysite」フォルダにて、下記コマンドを実行し、マイグレート(データベース設定変更の適用)します。
動作確認
「mysite」フォルダにて、下記コマンドを実行し、サーバーを起動します。
    
    ブラウザを1つ立ち上げ、「http://127.0.0.1:8000」にアクセスします。
    「aiueo」と「あいうえお」というメッセージをフォームに入力し、「Send」ボタンを押します。
    
    送信したメッセージが、即座に、ブラウザのメッセージリストに追加されます。
    
    ブラウザをもう1つ立ち上げ、「http://127.0.0.1:8000」にアクセスします。
    「abc」と「xyz」というメッセージをフォームに入力し、「Send」ボタンを押します。
    
    送信したメッセージが、即座に、両方のブラウザのメッセージリストに追加されます。
    
    起動したサーバーは、「Ctrl + C」で終了します。
ダウンロード
関連ページ
前項目:04. Redisの有効化
    
    次項目:06. WebSocket Consumer の処理の非同期処理化
