私は非常に簡単な例でActionCableをテストしています。 ウェブサイトで一度に何人のユーザーが接続されているのかを見たいと思っています。 ユーザーはシステムに登録されていません。 ユーザーには、uuidを使用してセッション変数が割り当てられます。 例をできるだけシンプルにするために、モデルやデータベースは含めていません。Rails ActionCableは、ブラウザが閉じるときにユーザを退会させます。
#app/controller/users_controller.rb
class UsersController < ApplicationController
def index
if session[:user].nil?
session[:user] = SecureRandom.uuid
end
@user = session[:user]
UserBroadcastJob.perform_later @user
end
end
ビューは
ユーザーのための部分的な#app/views/users/index.html.erb
<h1>Users</h1>
<div id="users">
<%= render "user",user: @user %>
</div>
非常に単純です:
#app/views/users/_user.html.erb
<div class="user">
User : <%= user %>
</div>
私はソケット
#app/jobs/user_broadcast_job.rb
class UserBroadcastJob < ApplicationJob
queue_as :default
def perform(user)
ActionCable.server.broadcast 'user_channel', message: render_user(user)
end
def render_user(user)
ApplicationController.renderer.render(partial: 'users/user', locals: { user: user })
end
end
とチャネル
を呼び出すためのジョブを使用しApp.user = App.cable.subscriptions.create "UserChannel",
connected: ->
disconnected: ->
received: (data) ->
console.log(data)
$("#users").prepend(data.message)
これは正しく動作します。各ブラウザで私は開いているuuidが表示されている開いている。 私は永続性のためにデータベースを使用しないので、最初に開いているブラウザはすべてuuidを持ち、残りのブラウザはn-1 uuidになります。大事なことじゃない。
私の質問は:
ブラウザが閉じた場合、どのように私はテンプレートからUUIDを削除するメッセージを送ることができますか?
ActionCableはセッションでは機能しません。
Rubyのバージョン:2.4.0 Railsのバージョン:糸を介してインストール5.1.3 jqueryの
感謝!!!!