07-06-2012, 08:21 AM
(07-06-2012, 01:20 AM)ToraTora a écrit : Je veux ajouter uen couche de temps réelle à une application déjà existante.
J'utilise du AJAX en ce moment pour les requêtes asynchrone que je voudrais remplacer par node.
Les avantages ? Je ne sais pas, c'est pour ça que je demande si utiliser node convient à ce genre de situation
je ne connaissais pas PHP-FPM, merci je vais regarder ça !
Pour mettre en place ta couche de temps réel, tu as besoin de deux canaux de communication (ou d'un seul qui est full duplex) : un pour permettre une communication du client vers le serveur, et l'autre du serveur vers le client.
Pour communiquer du client vers le serveur, c'est facile : Ajax. On le fait déjà depuis des années, ça fonctionne très bien et c'est efficace. Note qu'on peut aussi utiliser Websocket pour ce type de communication, mais à ce jour on utilise rarement Websocket seul mais plutôt des outils qui font abstraction du moyen technique. Bref, Ajax est le plus simple (d'autant qu'il est direct : du navigateur vers l'application PHP).
Pour la communication du serveur vers le client, on doit utiliser des mécanismes de push. Là encore, il y a Websocket, le long polling, les Flash sockets, etc. Une fois de plus, on préfère utiliser des abstractions (Juggernaut, Socket.IO, Faye, etc.) ou carrément des services Web (Pubnub, Pusher, etc.). Le fait est que ces abstractions sont souvent basées sur Node. Le principe est simple : le serveur de push maintient des connexions avec les navigateurs et quand l'application Web a besoin d'envoyer une information sur un canal, elle l'indique à ce serveur de push qui s'occupe d'envoyer les messages aux navigateurs inscrits à ce canal.
Ce découpage a l'avantage d'être très simple : ton code métier est écrit en PHP (ou Python, ou Ruby, etc.) et ton serveur de push se cantonne simplement au rôle de messager. Ça permet d'avoir un système qui reste performant puisque chaque composant (le serveur de push et l'application PHP) est isolé et s'en tient à son rôle, et peut donc être optimisé individuellement.