2012-07-31 1 views
1

Quelle serait la meilleure façon d'enregistrer un nombre de connexions en direct en utilisant le framework Meteor? J'ai l'obligation de partager en ligne des utilisateurs en ligne et ai eu recours à la création d'une collection et juste en remplaçant un enregistrement à l'initialisation pour chaque utilisateur, mais le compte semble réinitialiser, ce que j'ai jusqu'ici ci-dessous, merci à l'avance.Nombre de connexions Meteor

Counts = new Meteor.Collection "counts" 

if Meteor.is_client 
    if Counts.findOne() 
    new_count = Counts.findOne().count + 1 
    Counts.remove {} 
    Counts.insert count: new_count 
    Template.visitors.count = -> 
    Counts.findOne().count 

if Meteor.is_server 
    reset_data = -> 
    Counts.remove {} 
    Counts.insert count: 0 
    Meteor.startup -> 
    reset_data() if Counts.find().count() is 0 

Répondre

1

Vous avez une condition de concurrence lorsque vous faites confiance à "obtenir la valeur de comptage, retirer de la collection, insérer dans la collection le nouveau compte". Les clients peuvent obtenir la valeur X en même temps. Ce n'est pas le chemin à parcourir. À la place, essayez de faire en sorte que chaque client insère «lui-même» dans une collection. Mettez un identifiant unique et le "moment" où il a été inséré. Utilisez Meteor.Method pour implémenter un heartbeat, rafraîchissant ce "time". Les clients avec un temps trop ancien peuvent être supprimés de la collection. Utilisez une minuterie dans le serveur pour supprimer les clients inactifs.

Vous pouvez vérifier certaines de ces ici: https://github.com/francisbyrne/hangwithme/blob/master/server/game.js