Server-sent events handler

Pour un système de notifications

a marqué ce sujet comme résolu.

Bonjour à tous !

Je viens vers vous aujourd'hui pour quelques questions par rapport à Monolog et à la possibilité d'intégrer des SSE.

Le souci que je rencontre, c'est que je ne vois pas trop comment je peux envoyer des données tout en répondant à un URL spécifique depuis un handler. J'ai l'impression que les données seront des objets Response, donc j'imagine que je devrai implémenter d'autres interfaces ou étendre une autre classe que pour un handler "classique", mais je ne vois pas trop bien le(s)quelle(s), même si je pense qu'une classe Controller pourrait être intéressante à étendre.

Je lis déjà ceux qui vont me dire d'utiliser les WebSockets, mais ça me paraît un peu overkill pour, au final, simplement envoyer des notifications depuis le serveur, surtout qu'il n'y aura aucune interaction. L'idée première est vraiment d'envoyer les logs au format SSE.

Est-ce que quelqu'un qui connaît un peu mieux les truchements internes de Symfony aurait quelque chose à me proposer ?

Merci  :)

+0 -0

De mémoire HTTP est plutôt fait pour fonctionner du client vers le serveur (requête → réponse).

Peut-être qu'avec HTTP/2 tu pourrais forcer quelque chose mais ça me paraît plus être de la bricole qu'autre chose (surtout que ça se fait pendant la réponse du serveur donc sur un temps limité).

Après les sockets avec PHP ça m'a toujours semblé un gros bordel pour rien, surtout que c'est pas un langage très adapté (ça fonctionne surtout pour répondre à des requêtes, pas comme un serveur indépendant, comme Node.JS le ferait) à la base

Dommage…

J'avais naïvement pensé, en voyant l'exemple donné sur la page MDN des Server-Sent Events que ç'aurait été possible… La seule pièce qu'il me semblait me manquer, c'était comment rediriger le flux vers un URL plutôt que vers un fichier/boîte mail/etc., ce que Monolog permet déjà de faire.

+0 -0

Ah oui, ils laissent tourner une boucle en fond. C'est plutôt dangereux, non ?

Sur une poignées de clients ça posera pas trop de problèmes, mais très vite tu auras des centaines de processus qui moulinent en fond, ça me paraît beaucoup pour le serveur…

viki53

Je le pense aussi…
En fait, de ce que j'ai pu comprendre, c'est soit une tâche qui tourne en fond et la connexion est persistante, soit de multiples et régulières connexions (par défaut, c'est toutes les 3 secondes, mais on peut paramétrer ça dans le flux avec retry: [nombre de milisecondes avant reconnexion])

Mais ça pose un problème de buffer quelconque à vider, du coup. Et comme il y aura probablement plusieurs abonnés, à moins que je multiplie les canaux, un par abonné…

Edit

Je vais mettre quelques pistes intéressantes ici.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte