2016-04-16 4 views
3

Ich beginne mit Rails 5 und Action Cable und möchte eine Liste der Namen aller angeschlossenen registrierten Benutzer anzeigen (so etwas wie den grünen Kreis von Facebook).

Ich habe es geschafft, den Namen des Benutzers zu bekommen, aber jetzt denke ich, was ist der beste Weg, sie zu speichern. Im Knoten würde ich einfach in ein Array auf dem Server, aber wie ich weiß, ist das in ActionCable nicht möglich.
Rails 5 - Action Cable - Liste der angeschlossenen Benutzer

Was ist der effektivste Weg, dies zu tun? Speichern sie in der Datenbank (postgres, redis)?

+1

Haben Sie eine Lösung gefunden? – user525717

Antwort

1

Die Wirksamkeit hängt vollständig von Ihren Bedürfnissen ab. Brauchen Sie die Persistenz einer Datenbank?

Ansonsten können Sie auch ein In-Memory-Array auf Ihrem Rails-Server verwenden. Vielleicht Memcache oder etwas Ähnliches.

Dies ist eine sehr offene Antwort, weil es eine sehr offene Frage ist. Ich denke, Sie sollten einige Überlegungen auf Ihre Bedürfnisse geben :)

1

ein online Feld

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

Machen Sie einen Auftritt Kanal

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 

zu Users hinzufügen Stellen Sie sicher, alle Besucher der AppearanceChannel abonnieren, wenn Sie betreten Ihre Website (über einen JavaScript-Aufruf, siehe http://guides.rubyonrails.org/action_cable_overview.html#client-side-components). Fügen Sie die Berechtigung zur Aktion Kabel:

Gefällt Ihnen dieses https://rubytutorial.io/actioncable-devise-authentication/

oder wie die How To use devise_token_auth with ActionCable for authenticating user?

Nehmen wieder etwas JavaScript-Code zu erkennen, die eingehenden "{user: current_user.id, online: auf}" -Meldung und setze den grünen Punkt auf einem Benutzeravatar.

1

Ich glaube der beste Weg wäre, sie in redis zu speichern, weil es wirklich schnell ist. Wichtiger ist jedoch die Tatsache, dass Sie bei Verwendung von Postgres oder anderen RDBMS unnötige Belastung für Ihre Datenbank erzeugen.