Page 1 sur 1
De l'utilité du singleton en PHP
Posté : 26 nov. 2007, 21:21
par eureka
Bonjour,
Je viens du monde Java et j'essaie d'appliquer en PHP les principes de POO que j'utilise en Java. Mais je suis très décu du fonctionnement du Singleton dans un environnement Web. En effet la durée de vie du singleton est exactement égale à celle de l'exécution de la page web qui l'instancie et n'est donc pas partageable par plusieurs pages, ce qui enlève tout interêt à ce patron de conception dans un environnement web sans l'utilisation d'un serveur d'application.
Connaissez-vous un moyen de gérer la persistance et le partage d'objet en php dans un environnement web ?
Merci par avance pour vos réponses.
Cordialement
Posté : 26 nov. 2007, 21:35
par titerm
APC, les sessions, la serialisation sur FS te permettent de gérer la persistance
Posté : 26 nov. 2007, 21:45
par eureka
Merci pour ta réponse rapide
Concernant APC, je suppose qu'il n'existe pas beaucoup d'hébergeur qui l'ont installé.
Quant à la session, elle est valable pour un utilisateur et ne répond donc pas à ma problèmatique de partage d'objet.
Dans quels cas on utilise un singleton dans un environnement web ?
Posté : 26 nov. 2007, 23:08
par AB
Dans quels cas on utilise un singleton dans un environnement web ?
Par exemple ce lien
http://www.journaldunet.com/developpeur ... ry-1.shtml
qui figure dans ce sujet
http://www.phpfrance.com/forums/voir_sujet-34403-15.php
Posté : 27 nov. 2007, 00:02
par eureka
Merci pour tes liens AB
Mais il m'explique ce qu'est un Singleton et je crois que je le savais déjà car je le pratique tous les jours (mais en java).
Je crois que je me suis mal expliqué, j'en suis désolé ! Le mieux est que j'explique ce que je veux faire :
J'ai un forum auquel est associé un chat irc et je voudrais afficher sur la page d'index du forum, la liste des personnes connectés au chat. Pour cela il faut se connecter au serveur irc, lancer la commande /names récupérer la liste des pseudos et l'afficher. Je voudrais éviter de me connecter au serveur irc à chaque affichage de l'index (qqsoit l'utilisateur) car c'est trop long. En java, j'avais programmé un singleton qui n'est instancié qu'une fois et qui vit jusqu'à l'arrêt du serveur donc accessible par getInstance par tous les utilisateurs sans réinstanciation et sans besoin de sérialiser.
En PHP, je ne sais pas comment faire.
Voila !
Posté : 27 nov. 2007, 01:45
par Sékiltoyai
Tu as fais du jsp ou de l'applet java (la différence conceptuelle est je pense énorme…) ?
Posté : 27 nov. 2007, 10:57
par eureka
Non, je n'ai pas fait d'applet Java, seulement des jsp et des servlets, c'est à dire coté serveur comme le php. Mais je ne suis pas dogmatique et je prend conscience que je ne pourrai pas résoudre mon problème avec un singleton (ce serait trop simple). Je crois que la seule solution qui se présente à moi est d'écrire un démon php qui agirait en tant que proxy ou (bouncer)qui se connecterait une fois et une seule au serveur irc et qui recevrait ses requêtes de la page php via ajax sur un port dédié. Mais cette solution, c'est comme utiliser un 35 tonnes pour transporter une fourmi.
Si vous en avez une plus simple, je suis preneur ...
Cordialement
Posté : 27 nov. 2007, 11:10
par Calimero
Ayant eu des besoins similaires dans le passé, je te propose d'utiliser un cache avec une délai d'expiration assez court (5 minutes par exemple) pour ne pas surcharger de connexions le serveur IRC. Ainsi un seul utilisateur par tranche de temps déclenchera la connexion, et les autres auront droit à l'information en cache.
C'est à mon avis la meilleure approche temps de dev/fonctionnalité pour ton besoin.