Rails 5 - 操作电缆 - 已连接用户列表

时间:2016-04-16 10:27:35

标签: real-time ruby-on-rails-5 actioncable

我从Rails 5和Action Cable开始,我想显示所有已连接注册用户的名称列表(类似于facebook的绿色圆圈)。

我设法得到用户的名字,但现在我在想什么是存储它们的最佳方式。在节点I中,我只是在服务器上的一个数组中,但据我所知,在ActionCable中是不可能的。

最有效的方法是什么? 将它们存储在数据库中(postgres,redis)?

3 个答案:

答案 0 :(得分:1)

有效性完全取决于您的需求。你需要数据库的持久性吗?

另外,您也可以在Rails服务器上使用内存中的数组。也许memcache,或类似的东西。

这是一个非常开放的答案,因为这是一个非常开放的问题。我认为你应该考虑一下你的需求:)

答案 1 :(得分:1)

online字段添加到Users

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

制作外观频道

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

确保所有访问者在进入您的网站时订阅AppearanceChannel(通过一些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代码来检测传入的&#34; {user:current_user.id,online :: on}&#34;消息并在用户头像上设置绿点。

答案 2 :(得分:1)

我认为最好的方法是将它们存储在redis中,因为它真的很快。但是,更重要的是,如果你使用postgres或任何其他RDBMS,你将在db上创建不必要的负载