我从Rails 5和Action Cable开始,我想显示所有已连接注册用户的名称列表(类似于facebook的绿色圆圈)。
我设法得到用户的名字,但现在我在想什么是存储它们的最佳方式。在节点I中,我只是在服务器上的一个数组中,但据我所知,在ActionCable中是不可能的。
最有效的方法是什么? 将它们存储在数据库中(postgres,redis)?
答案 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上创建不必要的负载