2010-09-21 6 views
1

Je construis une webapp. HTML + AJAX < -> PHP < -> MySQL; très traditionnel. Ce que je dois faire est d'avoir un état que toutes les sessions peuvent lire, et quelque chose qui entraîne des changements d'état, même si aucun utilisateur ne regarde le site.Comment synchroniser l'état entre les sessions PHP?

Un exemple simple serait un compteur. Nous démarrons le compteur à partir de zéro, puis chaque fois qu'un utilisateur se connecte au site Web, il voit la valeur actuelle du compteur. Même si personne ne regarde le site, le compteur augmente encore. Tout le monde regarde le site web voit la même valeur en même temps.

Quelle est la meilleure façon de l'implémenter? Il semble que je devrais être capable de le faire sans avoir à stocker des valeurs dans la base de données et avoir tout le monde interroger la base de données pour l'état. Mais je ne sais pas comment faire fonctionner PHP quand personne n'est connecté. Ai-je besoin d'un quatrième composant? Je n'ai pas mon propre serveur web, tout ce matériel est hébergé dans un endroit standard qui configure l'environnement pour moi, mais ils semblent avoir les choses les plus à jour et les plus raisonnables que l'on puisse attendre dans ce type de pile.

De toute évidence, ce n'est pas mon domaine d'expertise, donc tout nudges dans la bonne direction sont appréciés.

+0

Si vous avez besoin d'un état partagé entre les sessions, vous aurez besoin d'un stockage permanent (ish) comme une base de données ou, si c'est trop, vous pouvez utiliser des fichiers plats. Les sessions PHP sont supposées être indépendantes. – NullUserException

Répondre

1

Vous pouvez définir une variable PHP globale et si votre hébergeur l'autorise dans votre panneau de configuration à configurer un travail cron pour exécuter un script php dans votre application qui incrémente la variable toutes les quelques minutes.

http://en.wikipedia.org/wiki/Cron

Habituellement hébergeurs auront une application de planificateur cron dans leur panneau de contrôle qui vous permet de choisir ce script à exécuter et à quels intervalles de temps.

+0

Pour ce que je veux faire un PHP global est probablement suffisant. Je vais regarder dans l'accès cron. Merci. –

1

Pourriez-vous expliquer exactement ce que vous voulez faire en arrière-plan? Quoi qu'il en soit, il semblerait que vous voulez regarder dans la mise en place d'une tâche cron pour exécuter un script PHP basé sur la console pour effectuer cette fonctionnalité supplémentaire. Vous pouvez planifier des tâches cron à exécuter aussi souvent que vous le souhaitez. La configuration des tâches cron peut se faire à partir de tout panneau de contrôle qui en vaut la peine (cPanel, Plesk, Exim, peu importe).

En ce qui fait garder cette information à toutes les sessions dans votre code PHP principal face à l'avant, vous pouvez stocker les informations dans un cache (en utilisant Memcache)

+0

Eh bien, l'exemple du minuteur est une forme très simplifiée de ce que je veux faire. Fondamentalement, j'ai un calendrier des choses qui se passent, et je veux que tout le monde qui consulte le site pour voir le site dans le même état le long de la chronologie. Ce n'est pas beaucoup d'information, juste un index, donc Memcache est probablement exagéré. –

+0

Vous seriez surpris de voir à quel point il est facile de lancer un démon Memcache et à quel point il est simple d'utiliser l'API. –

+0

Eh bien, je vais y jeter un coup d'oeil et voir. Merci. –

1

Ce qui rend l'augmentation du compteur?

Vous pouvez utiliser un travail cron.

Pour que l'état persiste sur toutes les connexions, il doit soit être stocké dans une base de données, soit sous la forme d'un fichier (de toute façon une base de données).

+0

Je ne suis pas sûr, c'est pourquoi je demandais. On dirait qu'un travail cron est le chemin à parcourir. Merci.Les différents états dans lesquels il peut se trouver seront dans une table dans la base de données, mais l'index dans l'état actuel changera fréquemment. –

+0

@jeffamaphone Bonne chance et bon codage! – alex