Est-il possible d'utiliser Sockets.io côté client et de communiquer avec une application PHP sur le serveur? PHP supporte-t-il même une telle manière d'écrire du code avec une connexion de longue durée?
Tout l'exemple de code que je trouve pour socket.io semble être pour node.js côté serveur, donc aucune aide là-bas.
Réponses:
Il est peut-être un peu tard pour répondre à cette question, mais voici ce que j'ai trouvé.
Je ne veux pas débattre sur le fait que les nœuds le font mieux que php ou pas, ce n'est pas le point.
La solution est: je n'ai trouvé aucune implémentation de socket.io pour PHP.
Mais il existe des moyens d'implémenter WebSockets . Il existe ce plugin jQuery vous permettant d'utiliser Websockets tout en dégradant gracieusement pour les navigateurs non compatibles. Du côté PHP, il y a cette classe qui semble être la plus utilisée pour les serveurs PHP WS.
la source
Si vous souhaitez utiliser socket.io avec php, cela peut être votre réponse!
site Web du projet:
elephant.io
ils sont également sur github:
https://github.com/wisembly/elephant.io
Elephant.io fournit un client socket.io entièrement écrit en PHP qui devrait être utilisable partout dans votre projet.
C'est une bibliothèque légère et facile à utiliser qui vise à apporter des fonctionnalités en temps réel à une application PHP via socket.io et websockets pour des actions qui ne pourraient pas être effectuées en javascript complet.
exemple du site Web du projet (communiquer avec le serveur websocket via php)
serveur php
serveur socket io
la source
MISE À JOUR: août 2014 Le site socket.io v1.0 actuel a un exemple PHP: - https://github.com/rase-/socket.io-php-emitter
la source
Si vous voulez vraiment utiliser PHP comme backend pour socket.io, voici ce que j'ai trouvé. Deux alternatives côté serveur php socket.io.
https://github.com/walkor/phpsocket.io
https://github.com/RickySu/phpsocket.io
Exemples de codes pour le premier référentiel comme celui-ci.
la source
Pour la «connexion longue durée» que vous avez mentionnée, vous pouvez utiliser Ratchet pour PHP. C'est une bibliothèque construite à partir des fonctions Stream Socket que PHP prend en charge depuis PHP 5.
Pour le côté client, vous devez utiliser WebSocket pris en charge par HTML5 au lieu de Socket.io (puisque vous le savez, socket.io ne fonctionne qu'avec node.js).
Si vous souhaitez toujours utiliser Socket.io, vous pouvez essayer de cette manière: - trouver et obtenir socket.io.js pour le client à utiliser - travailler avec Ratchet pour simuler la façon dont socket.io le fait sur le serveur
J'espère que cela t'aides!
la source
Euh, pourquoi le voudriez-vous? Laissez PHP sur le backend et NodeJS / Sockets pour faire son travail non bloquant.
Voici quelque chose pour vous aider à démarrer: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc
Personnellement, j'ai express en cours d'exécution avec un point de terminaison qui écoute expressément l'interaction de PHP.
Par exemple, si j'ai envoyé un e-mail à un utilisateur, je souhaite que socket.io affiche une notification en temps réel à l'utilisateur.
Vous voulez une interaction de socket.io vers php, eh bien, vous pouvez simplement faire quelque chose comme ceci:
Sérieusement, PHP est idéal pour faire des choses côté serveur et le laisser avec les connexions, il n'a plus sa place dans ce domaine maintenant. Pourquoi faire quelque chose de long interrogation lorsque vous avez des websockets ou des flashsockets.
la source
Je connais l'homme de lutte! Mais j'ai récemment travaillé avec Workerman. Si vous n'êtes pas tombé sur ce framework php, vous feriez mieux de le vérifier!
Eh bien, Workerman est un framework PHP asynchrone piloté par les événements pour créer facilement des applications réseau rapides et évolutives. (Je viens de copier et coller cela à partir de leur site Web hahahah http://www.workerman.net/en/ )
La façon simple d'expliquer cela est que lorsqu'il s'agit de programmation de socket Web, tout ce dont vous avez vraiment besoin est d'avoir 2 fichiers sur votre serveur ou serveur local (où que vous soyez).
server.php (code source qui répondra à toutes les demandes du client)
client.php / client.html (code source qui fera les choses demandées)
Donc, fondamentalement, vous corrigez d' abord le code sur votre serveur.php et démarrez le serveur. Normalement, comme j'utilise Windows, ce qui ajoute plus de difficulté, je lance le serveur via cette commande -> php server.php start
Eh bien, si vous utilisez xampp. Voici une façon de le faire. Accédez à l'endroit où vous souhaitez placer vos fichiers. Dans notre cas, nous allons mettre les fichiers dans
C: /xampp/htdocs/websocket/server.php
C: /xampp/htdocs/websocket/client.php ou client.html
En supposant que vous avez déjà ces fichiers sur votre serveur local. Ouvrez votre Git Bash ou votre ligne de commande ou votre terminal ou celui que vous utilisez et téléchargez les bibliothèques php ici.
https://github.com/walkor/Workerman
https://github.com/walkor/phpsocket.io
Je le télécharge généralement via composer et je charge simplement ces fichiers dans mes scripts php.
Et vérifiez également celui-ci. C'est vraiment important ! Vous avez besoin de cette bibliothèque javascript pour que client.php ou client.html puisse communiquer avec le server.php lorsque vous l'exécutez.
https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client
Je viens de copier et coller ce dossier socket.io-client au même niveau que mon serveur.php et mon client.php
Voici le code source server.php
Et voici le code source client.php ou client.html
Encore une fois, ouvrez votre ligne de commande ou git bash ou terminal où vous avez placé votre fichier server.php. Donc, dans notre cas, c'est C: / xampp / htdocs / websocket / et tapé dans php server.php start et appuyez sur Entrée.
Ensuite, allez dans votre navigateur et tapez http: //localhost/websocket/client.php pour visiter votre site. Ensuite, tapez simplement n'importe quoi dans cette zone de texte et vous verrez un websocket php de base en déplacement!
Vous devez juste vous souvenir. Dans la programmation de socket Web, il suffit d'un serveur et d'un client. Exécutez d'abord le code serveur et ouvrez le code client. Et voila! J'espère que cela t'aides!
la source
Si vous voulez vraiment utiliser PHP comme backend pour les WebSockets, ces liens peuvent vous aider:
https://github.com/lemmingzshadow/php-websocket
http://www.htmlgoodies.com/html5/other/create-a-bi-directional-connection-to-a-php-server-using-html5-websockets.html#fbid=QqpDVi8FqD9
la source
Que dis-tu de ça ? PHPSocketio ?? C'est une alternative côté serveur php socket.io. La boucle d'événements est basée sur l'extension d'événement pecl. Bien que je ne l'ai pas essayé moi-même jusqu'à présent.
la source
Nous sommes maintenant en 2018 et hoola, il existe un moyen d'implémenter WS et WAMPServer sur php. C'est appelé Ratchet .
la source
Je ne l'ai pas encore essayé, mais vous devriez pouvoir le faire avec ReactPHP et ce composant socket . Ressemble à Node, mais en PHP.
la source
Recherchez dans ces bibliothèques php http://phptrends.com/category/70 . Ou utilisez natif de php http://www.php.net/manual/en/book.sockets.php .
la source
Je cherchais un moyen très simple pour que PHP envoie un message socket.io aux clients.
Cela ne nécessite aucune bibliothèque PHP supplémentaire - il utilise juste des sockets.
Au lieu d'essayer de vous connecter à l'interface websocket comme tant d'autres solutions, connectez-vous simplement au serveur node.js et utilisez
.on('data')
pour recevoir le message.Ensuite, vous
socket.io
pouvez le transmettre aux clients.Détectez une connexion depuis votre serveur PHP dans Node.js comme ceci:
Voici le code php incroyablement simple - je l'ai enveloppé dans une fonction - vous pouvez trouver quelque chose de mieux.
Notez que
8080
c'est le port de mon serveur Node.js - vous voudrez peut-être changer.Vous pouvez l'utiliser comme ceci:
sio_message("chat message","Hello from PHP!");
Vous pouvez également envoyer des tableaux qui sont convertis en json et transmis aux clients.
sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));
C'est un moyen utile de «faire confiance» au fait que vos clients reçoivent des messages légitimes du serveur.
Vous pouvez également demander à PHP de transmettre les mises à jour de la base de données sans que des centaines de clients interrogent la base de données.
J'aurais aimé trouver cela plus tôt - j'espère que cela aide! 😉
la source
s.remoteAddress;
. Cependant, je ne le fais pas fonctionner. J'obtiens la connexion dans le nœud, il détecte la connexion, l'adresse à distance est correcte, maiss.on('data')
ne se produit jamais, mais rien ne se passe. J'ai essayés.on('msg')
aussi. J'utilise votre code PHP exact. J'utilise https, pour le serveur de nœuds, mais cela ne devrait pas avoir d'importance?8080
? Sinon, vous devez changer de port. Si tel est le cas, vérifiez leRemote Address
qui est renvoyé - assurez-vous qu'il s'agit de l'adresse de bouclage / locale - cela peut être différent avec la configuration de votre serveur. Pour le test, vous pouvez supprimer la ligneif(s.remoteAddress == "::ffff:127.0.0.1")