Action Cableについてまとめ
RailsのAction Cableについて概要のまとめとして備忘録。
●Action Cableとは
利用にはチャネルが必要
●Channel(チャネル)とは
即時更新機能を実施するサーバ側の仕組みのこと
データの送受信の設定などを行う
・チャネルの作成
messageチャネルを作成するとしたらターミナルにて
rails g channel message
を実施
●message_channel.rbについて
app/channels/message_channel.rbに生成できたファイルについて
このファイルはサーバーとクライアントを繋ぐファイル。stream_fromメソッドを用いることで、サーバーとクライアントの関連付けを設定する。
・stream_from
stream_fromとは、サーバーとクライアントを関連付けるメソッド
app/channels/message_channel.rb
class MessageChannel < ApplicationCable::Channel
def subscribed
stream_from "message_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
end
stream_fromメソッドで関連付けられるデータの経路のことを、broadcast(ブロードキャスト)と呼ぶ
・broadcast
broadcastとは、サーバーから送られるデータの経路のことを指す
broadcastを介してデータをクライアントに送信する
app/controller/messages_controller.rb
class MessagesController < ApplicationController
def new
@messages = Message.all
@message = Message.new
end
def create
@message = Message.new(text: params[:message][:text])
if @message.save
ActionCable.server.broadcast 'message_channel', content: @message
end
end
end
broadcastを通して、'message_channel'に向けて@messageを送信するという意味送信された情報は、message_channel.jsで受けとる
app/javascript/channels/message_channel.js
import consumer from "./consumer"
consumer.subscriptions.create("MessageChannel", {
connected() {
// Called when the subscription is ready for use on the server
},
disconnected() {
// Called when the subscription has been terminated by the server
},
received(data) {
const html = `<p>${data.content.text}</p>`;
const messages = document.getElementById('messages');
const newMessage = document.getElementById('message_text');
messages.insertAdjacentHTML('afterbegin', html);
newMessage.value='';
}
});
こちらで簡易的な非同期の通信ができる。