2010-11-04 6 views
0

J'ai un script jQuery dans mon en-tête qui met à jour le champ de base de données last_active datetime toutes les 60 secondes. Le problème est que si l'utilisateur a plusieurs fenêtres ouvertes, cela met une pression supplémentaire sur le serveur car chaque page est mise à jour après 60 secondes.Plusieurs pages exécutant le même script d'interrogation

Je préférerais régler ce problème sans avoir à recourir à des cadres ... si c'est même possible.

Avez-vous un problème avec ce problème?

Répondre

0

Vous pouvez vérifier les demandes IP provenant de votre logique PHP et placer une condition qui effectue uniquement la mise à jour à partir de cette adresse IP si cela n'a pas déjà été fait au cours des 60 dernières secondes.

+0

Merci pour les suggestions des gars ... Pour être honnête, c'est une requête SQL très simple. Juste met à jour la base de données avec le datetime actuel. La journalisation des adresses IP et le calcul du temps écoulé depuis la dernière requête semblent plus de travail. J'espérais implémenter quelque chose du coté du client via javascript qui permettrait de détecter le nombre d'instances de pages et d'exécuter le script de mise à jour sur l'un d'eux ... –

0

Vous pouvez faire comme Will suggéré mais le problème dans le cas ci-dessus est, pas tous les utilisateurs utilisent ip publique pour naviguer sur Internet. Dans ce cas, vous pouvez essayer de vérifier la version du navigateur et l'ID de session avec l'adresse IP. Ensuite, vous pouvez même différentes statistiques pour les utilisateurs derrière l'ISP/Cyber ​​Cafe avec IP unique et plusieurs machines de navigation.

0

Pourquoi gardez-vous un tel champ? Est-ce qu'il n'est pas possible de maintenir l'heure "last_accessed" à chaque fois qu'une requête arrive et l'utilise pour vos besoins plutôt que quelque chose comme ce que vous faites?

+0

Je construis un site qui permet de suivre ce que les utilisateurs sont en ligne à tout moment . Le script mettra à jour la base de données toutes les 60 secondes si la page est toujours ouverte (c'est-à-dire qu'elle est toujours en ligne). Supposons que je puisse stocker la dernière mise à jour dans la session des utilisateurs plutôt que la base de données et déterminer du côté client si une mise à jour est nécessaire :) –

+0

Lorsque vous vous connectez, vous stockez l'heure "last_accessed" avec une expiration * sur le serveur * . À chaque demande, vous mettez à jour ce champ. Chaque fois que vous calculez le nombre d'utilisateurs, vous parcourez simplement cette table et trouvez ceux qui n'ont pas expiré et les imprimez. Cela ne fonctionnerait-il pas? –

Questions connexes