IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Communication node.js <=> PHP


Sujet :

NodeJS

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut Communication node.js <=> PHP
    Bonjour et merci d'avance pour votre aide.
    Voila plus d'une semaine que j'essaie d'implémenter un websocket avec un projet MVC(CakePHP).
    Mais sans succés.

    Ma dernière idée et d'utiliser d'ajouter un serveur node.js comme relais pour le service de chat, notification et d'identification.
    Ébauche de process:
    Connexion
    • Utilisateur utlise de formulaire de connexion
    • Node.js renvoie ses données avec l'ID socket à l'application
    • L'application traite les données et renvoie le résultat.

    Notification
    • L'application enregistre un nouvelle donnée.
    • La notification est envoyé à node.js
    • node.js distribue la notificaiton à/aux utilisateur(s)


    Mon raisonnement tient la route ?
    Coté client c'est pas un soucis. J'utilise en ce moment socket.io et celui-ci est fonctionnel.
    Par contre coté serveur, j'ignore si node.js peut envoyer des requêtes (type Ajax par exemple) à mon application ?

    Merci à vous,

  2. #2
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    Le plus simple (et le plus scalable) pour faire communiquer Node.js avec PHP est encore de faire une API de webservices HTTP en PHP et de les appeler avec Node.js.

    Cependant, si tu comptes faire une application "temps réel", je te conseillerais d'éviter le passage par un quelconque script PHP (via une API ou autre) qui risque de te rajouter un temps de latence assez désagréable suivant le type d'application que tu désires faire (un chat rentre certainement dans cette catégorie).

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Ravi de te lire et merci, Gnuum

    une API de webservices HTTP en PHP et de les appeler avec Node.js.
    J'avais déjà aperçu quelques articles "API REST" c'est en lien avec ce que tu me dis ou ça n'a aucun rapport ?


    Concernant le chat, ça peu se faire avec node.js et socket.io. Y'aura juste à sauvegarde dans la base de donnée le message en parallèle.
    Mais ça sera juste entre utilisateur connecté. En gros, comment mettre de concert les sessions websocket et cakePHP ? (je gére mes session dans une base de donnée)

    Comme je connais pas trés bien node.js, j'ai utiliser le module request
    C'est le module qui convient ou tu me conseil un autre ?

    Merci à toi

  4. #4
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    Merci c'est gentil!

    Oui tout à fait REST est une architecture d'API qui est fondée sur le HTTP et qui est stateless (ce qui veut dire que tu n'utilises pas de session car le client ne doit pas laisser d'état sur le serveur).
    Je ne sais pas si dans ton cas c'est possible ou si tu as vraiment besoin de partager la session PHP et la session Node.js. En général, c'est bien d'essayer d'utiliser la session au minimum de ses capacités (surtout pour gérer la sécurité en gros).

    Si tu dois choisir entre appeler une API PHP ou requêter ta base de données en direct avec Node.js, je te conseille plutôt la 2e option si tu veux maximiser la performance et ne pas risquer un résultat potentiellement décevant. Après, la décision peut dépendre de l'architecture globale que tu souhaites donner.

    En ce qui concerne le partage de session, normalement l'id de session est dans un cookie (en PHP le cookie s'appelle généralement quelque chose comme PHPSESSID). A chaque requête, les cookies sont envoyés dans les headers au serveur. Donc normalement, avec une requête sur un serveur HTTP Node.js, les cookies sont passés également, donc pas de problème si tes sessions sont en base de données. Sauf que... tu utilises socket.io pour faire du temps réel. Dans ce cas, tu crées un tunnel TCP entre le client et le serveur et tu ne passes plus de headers "à chaque requête" (qui dans ce cas sont plutôt appelés des messages). Il faut donc, à la connexion, passer ton cookie de session pour pouvoir matcher toi même. A toi de conserver l'information tant que ton socket est en vie!

    Voici un code, que je fais un peu à l'arrache pour que tu l'aies ce soir (faudra certainement le corriger car pas testé):

    Côté client
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function getCookie(name) {
        var value = "; " + document.cookie;
        var parts = value.split("; " + name + "=");
        if (parts.length == 2) return parts.pop().split(";").shift();
    }
     
    var socket = io();
     
    socket.on('connect', function(data) {
        socket.emit('sendSession', { sessionId: getCookie('PHPSESSID') });
    });

    Côté serveur
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    io.on('connection', function(socket) {
        socket.on('sendSession', function(data) {
            var sessionId = data.sessionId;
     
            // TODO: retrieve your session from the database or send it to your PHP API with each request.
        });
    });

    N'hésite pas à me dire si je ne suis pas clair!

    PS: Si tu décides de requêter ton API PHP, request est effectivement un bon outil pour jouer le rôle de client HTTP!

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Points : 198
    Points
    198
    Par défaut
    Parfait, je met en tout ça en place et je reviens vers toi pour t'en informer.
    Encore merci et une agréable journée,

  6. #6
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    Oui, je veux bien que tu me tiennes au courant de comment tu fais au final!

    Bonne journée à toi aussi.

Discussions similaires

  1. Communication entre programme c et php
    Par dashed dans le forum C
    Réponses: 2
    Dernier message: 10/06/2013, 19h40
  2. Réponses: 8
    Dernier message: 03/11/2011, 13h16
  3. Réponses: 3
    Dernier message: 27/09/2006, 12h41
  4. Php/ASP.NET, modules communs ?
    Par Endae dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 12/10/2005, 17h07
  5. [XSL] nodes en commun
    Par kendras dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 04/08/2005, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo