2010-07-24 5 views
0

Existe-t-il un moyen simple de compter le nombre d'utilisateurs actifs ou d'invités (non connectés) visitant mon application rails?nombre d'invités en ruby ​​sur rails

À l'heure actuelle, j'ai un moyen de compter le nombre d'utilisateurs connectés dans les 15 dernières minutes en ayant une colonne last_seen_at pour l'utilisateur. Cependant, je ne veux pas utiliser la base de données pour calculer le nombre total d'utilisateurs ou d'invités actifs.

J'utilise Rails 3.

+0

Qu'y a-t-il de mal à l'extraire de la base de données? N'importe quelle raison? –

Répondre

2

En général, les utilisateurs comptant vu en dernières minutes X est ce que vous voulez. Demandez-vous comment voulez-vous définir l'utilisateur qui est en ligne? Ils ne sont pas constamment connectés au serveur, ils ne font que quelques demandes de temps en temps.

+0

Eh bien ouais. Les 15 dernières minutes iraient bien. Je veux dire, je suppose que je peux avoir un modèle/table qui enregistre chaque adresse IP et touche la mise à jour à la colonne chaque fois qu'un utilisateur visite une autre page. Mais je ne sais pas si c'est l'efficace. – kentor

+0

Je voudrais juste ajouter les colonnes last_seen_at et last_seen_from_ip à votre table d'utilisateur et le mettre à jour avec l'insertion brute (efficace) à l'action de chaque utilisateur. – skalee

2

Vous pouvez utiliser Juggernaut (qui utilise Flash) pour connecter les navigateurs Web des utilisateurs à vos applications ruby. Vous pouvez ensuite parcourir tous les clients enregistrés en utilisant la méthode show_clients.

+0

Je ne sais pas si Juggernaut fonctionne même pour Rails 3. Je l'ai essayé sur une nouvelle application et ça n'a pas l'air de marcher. – kentor

0

Si vous utilisez active_record pour session_store, vous pouvez facilement interroger votre table de session et la différence de vos utilisateurs actifs de votre table Utilisateurs comme ceci:

time_period = 24.hours.ago 
number_of_active_users = User.where('updated_at > ?', time_period).count 
number_of_active_sessions = ActiveRecord::SessionStore::Session.where('updated_at > ?', time_period).count 
number_of_guests = number_of_active_sessions - number_of_active_users 

Les instructions de configuration session_store à utiliser active_record se trouvent à config /initializers/session_store.rb.

Vous aurez besoin d'ajouter un fond d'écran pour effacer les sessions périmées afin que la table ne gonfle pas inutilement.