2016-04-16 10 views
3

私はRails 5とAction Cableから始めて、接続されているすべての登録ユーザの名前のリストを表示したいと思います。

私はユーザーの名前を知ることができましたが、今はそれらを保存する最良の方法が考えられています。ノードでは、単にサーバー上の配列になりますが、ActionCableではこれが不可能であることがわかります。
Rails 5 - アクションケーブル - 接続されたユーザのリスト

これを行う最も効果的な方法は何ですか? データベースに保存する(postgres、redis)?

+1

解決策は見つかりましたか? – user525717

答えて

1

効果はあなたのニーズに完全に依存します。あなたはデータベースの永続性を必要としますか?

それ以外の場合は、Railsサーバーでもメモリ内の配列を使用してください。おそらくmemcache、または類似のもの。

非常に自由回答ですので、これは非常に自由回答です。私はすべてのあなたの訪問者がAppearanceChannelときに加入していることを確認してください出現チャネル

class AppearanceChannel < ApplicationCable::Channel 
    def subscribed 

    stream_from "appearance_channel" 

    if current_user 

     ActionCable.server.broadcast "appearance_channel", { user: current_user.id, online: :on } 

     current_user.online = true 

     current_user.save! 

    end 


    end 

    def unsubscribed 

    if current_user 

     # Any cleanup needed when channel is unsubscribed 
     ActionCable.server.broadcast "appearance_channel", { user: current_user.id, online: :off } 

     current_user.online = false 

     current_user.save!  

    end 


    end 

end 

を作る

1

Users

class AddOnlineToUsers < ActiveRecord::Migration[5.0] 
    def change 
    add_column :users, :online, :boolean, default: false 
    end 
end 

onlineフィールドを追加し、あなたのニーズ:)にいくつかの考慮を与えるべきだと思います彼らはあなたのサイトに入ります(JavaScript呼び出しによって、http://guides.rubyonrails.org/action_cable_overview.html#client-side-componentsを参照)。アクションケーブルに許可を追加します。このhttps://rubytutorial.io/actioncable-devise-authentication/

または

How To use devise_token_auth with ActionCable for authenticating user?ような同様

は、着信を検出するために、再びいくつかのJavaScriptコードを適用「{ユーザー:current_user.id、オンライン:上}」のメッセージをユーザのアバター上に緑色の点を設定する。

1

私は本当に速いので、redisでそれらを保存するのが最善の方法だと思います。ただし、postgresやその他のRDBMSを使用すると、dbに不要な負荷がかかるという事実がより重要になります

関連する問題