Comment intégrer nodeJS + Socket.IO et PHP?
J'ai récemment été la recherche autour, à trouver un bon moyen de communiquer entre nodeJS et PHP. Voici l'idée : nodeJS est encore assez nouveau, et il peut être un peu difficile de développer une application entière avec elle. En outre, vous devrez peut-être seulement pour un module de votre projet, comme en temps réel des notifications, le chat, ... Et vous souhaitez gérer tous les autres trucs avec PHP, car il est probablement plus facile pour vous (et vous pouvez tirer parti des structures existantes, comme CodeIgniter ou Symfony).
Je voudrais avoir une solution facile ; je ne veux pas utiliser cURL, ou un troisième serveur de communiquer entre Apache et le Nœud serveurs. Ce que je veux, c'est être en mesure de capturer des événements de nœud simple Javascript, côté client.
Je n'ai pas trouvé toutes les réponses qui où les, la plupart du temps du côté client a été en cours d'exécution par le nœud de serveur et n'est donc pas applicable dans mon cas. J'ai donc analysé tous les sujets possibles, et enfin trouver ma réponse ; je vais essayer de partager cela, et d'avoir un point où tout est clair.
Espère que cela peut aider certaines personnes ! 😉
Vous devez vous connecter pour publier un commentaire.
Donc, pour commencer, j'ai mis mon projet sur github, si vous voulez accéder à l'intégralité de code: https://github.com/jdutheil/nodePHP
C'est un exemple très simple du projet: un site web de chat. Vous avez juste un auteur et de son message, et lorsque vous appuyez sur envoyer, il est enregistré dans une base de données mysql. L'idée est d'envoyer en temps réel des mises à jour, et d'avoir une vraie conversation. 😉 Nous allons utiliser nodeJS pour que.
Je ne parle pas de code PHP, il est vraiment très simple et pas du tout intéressant ici; ce que je veux vous montrer comment intégrer votre nodeJS code.
- Je utiliser express et de la Prise.IO, alors assurez-vous d'installer ces modules npm. Ensuite, nous allons créer un simple serveur nodeJS:
Nous avons enregistré nos événements de rappel lorsqu'un nouvel utilisateur est connecté ; chaque fois que nous recevons un message (représente un message de chat), nous avons diffusé à tous les utilisateurs connectés. Maintenant, la partie la plus délicate: côté client! Que la partie qui m'a pris le plus de temps, parce que je ne sais pas quel script inclure pour être en mesure d'exécuter le Socket.IO le code sans l'nodeServer (parce que le client page sera servi par Apache).
Mais tout est déjà fait; lorsque vous installez le Support.IO module npm, un script est disponible dans
/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
; que le script que nous allons inclure dans notre page PHP, dans mon cas:Et pour finir, mon nodeClient.js, où nous avons simplement se connecter au nœud de serveur et d'attendre l'événement de mise à jour de notre page. 😉
Je vais essayer de mettre à jour et améliorer mon code dès que possible, mais je pense qu'il a déjà ouvert à tous de choses cool! Je suis vraiment ouvert pour des conseils et des avis sur ce genre de choses, est-ce la bonne façon de le faire, .. ?
Espère que cela peut aider certaines personnes!
app.get('/', function (req,res) { res.sendfile(__dirname + 'index.php'); });
il ouvre la popup pour le téléchargement .fichier php. Comment puis-je résoudre ce problème?GET http://127.0.0.1:8080/socket.io/1/?t=1501069240046 404 (Not Found)
pouvez-vous aider?J'ai une autre solution qui fonctionne très bien pour moi, mais je voudrais quelqu'un pour faire un commentaire sur la façon dont elle est efficace, car je n'ai pas (encore) eu l'occasion ou le temps de le tester sur le serveur réel.
Va ici le nœud du code js. J'ai mis ce code dans un fichier appelé nodeserver.js:
Et voici le simple morceau de code en php, l'appel de la node-js serveur avec l'aide de file_get_contents():
Fonctionne très bien, lorsque je charge le php de la page, il appelle à son tour la nodeserver.js page, qui jsonify la knall-objet.
J'ai deux localhost-les installations en cours d'exécution sur iis sur windows 10, un standard de php-serveur, et la nodejs-server fonctionne avec neat iisnode paquet.
Le "vrai" serveur est exécuté sur ubuntu.
Je pense que c'est un pur et simple de la solution pour la communication entre les deux serveurs, mais peut-être quelqu'un a des commentaires à ce sujet?
nodejs.js
est en fait pas un fichier source, mais c'est une URL que vous avez nommé, parce qu'il contient json? La première n'est pas logique, mais ce dernier semble très confus pour moi.file_get_contents('http://localhost:3002/knall.json');
, parce quenodeserver.js
est le nom du serveur exécutable, mais votre nœud de serveur renvoie simplement la même chose pour n'importe quelle URL. Votre exemple est équivalent à un hello world page pour Apache à l'adresse URL example.com/apache.exe au lieu de /index.html qui serait trompeuse.Essayer similaire ou vous pouvez consulter mon blog pour exemple complet de code sur nodejs
Sur votre page de côté:
emit
fonction pour envoyer des données à nodeserver.Alors maintenant, votre code sera ressembler à
Maintenant sur le Nœud de côté de serveur de faire gestionnaire pour votre demande pour obtenir votre demande et envoyer un message à tous les périphériques connectés/navigateurs(server.js)
Maintenant le client/navigateur/client côté en font un récepteur pour recevoir socket message de nœud serveur