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

Bibliothèques et frameworks PHP Discussion :

Websocket: Ratchet PhP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 60
    Points : 40
    Points
    40
    Par défaut Websocket: Ratchet PhP
    Bonjour / Bonsoir

    Actuellement en master 1 de développement web en alternance, je travail sur un projet intégrant l'utilisation d'un Websocket.
    Après quelques recherches, je me suis tourné vers le framework Ratchet, qui semblait répondre à toutes mes attentes. Quelque minutes de développement m'ont permis de confirmer cela.

    Je suis maintenant confronté à plusieurs interrogations aux quelles je n'ai pas encore trouvé de réponse.

    Pour commencer, j'aimerais savoir si il y a un moyen, depuis le serveur, de "déconnecter" un client ?

    Enfin, côté client, j'utilise Javascript pour faire des tests. Comme indiquer dans le tutoriel de Ratchet, j'utilise l'objet Websocket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var conn = new WebSocket('ws://localhost:8080');
    Or, ceci implique que n'importe qui peut se connecter. Pour palier à ce souci, j'ai mis en place un système de token, mais cela induit que le client doit préalablement se connecter au Websocket.
    Il y a t-il une solution pour "contrôler" la connexion dès le début ?

    Enfin, ce Websocket fonctionne actuellement à côté d'une Webapp. Dans l'optique d'une refonte de cette Webapp, je me demandé si Ratchet s'intégrer facilement à Symfony2 ?
    Si non, un autre framework PHP serait plus adapté ?

    Merci d'avance !

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par n0wis Voir le message
    Pour commencer, j'aimerais savoir si il y a un moyen, depuis le serveur, de "déconnecter" un client ?
    Oui. L'interface ConnectionInterface propose la méthode close.

    Citation Envoyé par n0wis Voir le message
    Or, ceci implique que n'importe qui peut se connecter. Pour palier à ce souci, j'ai mis en place un système de token, mais cela induit que le client doit préalablement se connecter au Websocket.
    Il y a t-il une solution pour "contrôler" la connexion dès le début ?
    À ce que je sache, et à part la vérification du domaine, Ratchet ne propose pas de système d'authentification (ce qui est normal). C'est à toi de le faire à travers Symfony par ex (ou tout autre méthode).
    Citation Envoyé par n0wis Voir le message
    Enfin, ce Websocket fonctionne actuellement à côté d'une Webapp. Dans l'optique d'une refonte de cette Webapp, je me demandé si Ratchet s'intégrer facilement à Symfony2 ?
    Si non, un autre framework PHP serait plus adapté ?
    Oui, ratchet s'intègre sous Symfony2. Tu as des ratchet bundles qui font même l'intégration pour toi!
    Ceci dit, ratchet peut s'intégrer à n'importe quel framework.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Il y a t-il une solution pour "contrôler" la connexion dès le début ?
    Dans Websocket y'a "socket". Tu ne peux donc pas contrôler une connexion avant qu'elle s'établisse. Si un serveur à une socket ouverte sur un port tu peux t'y connecter. C'est la négociation entre les deux parties ensuite qui fait que la connexion se poursuit ou non.
    Donc tu es obligé d'accepter toutes les connexions , au serveur ensuite de faire le tri suivant si la connexion respecte le protocole établie et fournit les données nécessaires ou pas.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 60
    Points : 40
    Points
    40
    Par défaut
    Super, merci beaucoup pour vos réponses, elles m'ont bien aidées !

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 60
    Points : 40
    Points
    40
    Par défaut Ratchet Bundle
    Bonjour,

    Je reviens à cette discution car je rencontre des dificultés pour mettre en place Ratchet dans Symfony.
    J'utilise ce bundle. Il est stipulé dans la partie "Configuration" qu'il faut ajouter du YML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    p2_ratchet:
        provider: ~             # The client provider to use, null for default
        address: 0.0.0.0        # The address to receive sockets on (0.0.0.0 means receive from any)
        port: 8080              # The port the socket server will listen on
    J'en ai déduit qu'il fallait ajouter ce YML dans le fichier service.yml.

    J'ai donc suivit la maigre doc', déclaré le bundle importé dans Vendor dans mon AppKernel, et ajouté la configuration dans à la fin du fichier service.yml du bundle. Je n'ai que modifier le port.
    Suite à cela, j'obtient l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    InvalidArgumentException in P2RatchetExtension.php line 34:
    Missing provider config in section: p2_ratchet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    in P2RatchetExtension.php line 34
    at P2RatchetExtension->load(array(array(), array('provider' => null, 'address' => '0.0.0.0', 'port' => '7076')), object(ContainerBuilder)) in MergeExtensionConfigurationPass.php line 55
    at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in MergeExtensionConfigurationPass.php line 39
    at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in Compiler.php line 117
    at Compiler->compile(object(ContainerBuilder)) in ContainerBuilder.php line 614
    at ContainerBuilder->compile() in bootstrap.php.cache line 2618
    at Kernel->initializeContainer() in bootstrap.php.cache line 2396
    at Kernel->boot() in bootstrap.php.cache line 2427
    at Kernel->handle(object(Request)) in app_dev.php line 28
    Visiblement, mes paramètres sont bien chargées.
    Aurez-vous une idées de la façon dont je peux résoudre ce souci ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Tu dois mettre la configuration dans app/config/parameters.yml

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 60
    Points : 40
    Points
    40
    Par défaut
    Effectivement, dans le fichier parameters.yml, ça fonctionne mieux

    Du coup, j'en arrive à un autre point.
    Actuellement, les clients de mon application envoies des messages au serveur WebSocket au format JSON. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.send("{'action':'someAction','datas':'someDatas'}");
    Existe t-il un moyen pour créer des événement utilisable par le client ? Ce qui donnerais dans l'idéal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.someAction([array_of_datas]);
    Je me suis intéressé au WAMP protocole avec AutobahnJS, mais cela ne m'a pas vraiment avancé.

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Ton exemple est une méthode, pas un évènement.

    Je ne suis pas sûr que ça soit possible, mais rien ne t'interdit d'utiliser un décorateur pour ajouter des méthodes à ton objet WebSocket, et de déclencher tes propres évènements dans ces méthodes.

Discussions similaires

  1. Chat WebSocket PHP avec utilisateurs
    Par goku19 dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2015, 16h05
  2. [PHP 5.4] Tentative de création serveur PHP => WebSocket API [HandShack]
    Par mikadev dans le forum Langage
    Réponses: 0
    Dernier message: 19/11/2014, 21h26
  3. WebSocket API et serveur php
    Par ascito dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 6
    Dernier message: 17/06/2014, 03h45
  4. Serveur PHP websocket AVEC multi processus
    Par aoemaster dans le forum Langage
    Réponses: 0
    Dernier message: 06/03/2012, 04h33
  5. Où héberger une application en PHP/HTML5/WebSocket ?
    Par z4k4r14 dans le forum Hébergement
    Réponses: 0
    Dernier message: 21/11/2010, 18h55

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