Acceder a mon serveur push depuis un client php en localhost

Par Steeve VERDIEU, il y a 9 ans


Javascript NodeJS

Bonjour,

J'ai un serveur push herberger sur planet hoster. Je communique avec ce serveur grace a elephant io depuis un api rest en symfony. En local tout fonction bien, mais quand je met le serveur push en production, je n'arrive plus a communiquer avec lui. J'ai essayer d'activer le cors:

io.set('origins', '*:*');

Ca exige que le client qui communique au serveur precise un certain port, Or, mon client en local n'a pas de port que je peu preciser puisque l'url en local de l'application est la suivaante:

http://localhost/BattleTub-admin/web/app_dev.php

Comment faire pour resoudre ca?

24 réponses

Steeve VERDIEU, il y a 9 ans

Personne peut m'aider?

Steeve VERDIEU, il y a 9 ans

Ben... C'est pas trop clair. Comment j'arrive à remplacer localhost par l'ip:port?

Defy, il y a 9 ans

tu a bien une url qui te permet de connecter ton client a ton derver non?

Steeve VERDIEU, il y a 9 ans

Ben oui Defy

Steeve VERDIEU, il y a 9 ans

Voici le code de mon serveur:

var app = require( 'express' )(); var server = require( 'http' ).createServer( app ); var io = require( 'socket.io' ).listen( server ); var port = process.env.PORT || 8080; io.set('origins', '*:*'); app.get('/', function (req, res) { //Test de connexion res.end("Test de cross domaine avec socket io: " + port ); }); io.sockets.on( 'connection', ( socket ) => { socket.emit( 'connect_message', 'Ou konekte gason m Steeve' ); });
Defy, il y a 9 ans

comment tu te connecte a ton server depuis le client.

Steeve VERDIEU, il y a 9 ans

En php, j'utilise un bundle qui s'appelle elephant io. Dans le fichier de configuration, c'est là que je dois preciser l'url du serveur push. La configuration se fait comme suit:

nc_elephant_io: clients: default: connection: http://battle-push-test.webmobilexpert.com/ # specify version 0.x for 0.* version and 1.x for 1.0 version version: 0.x your_key: connection: http://battle-push-test.webmobilexpert.com/ version: 1.x

Les parametres "connection" precise l'url du serveur node.

Ensuite, dans le controleur, l'envoie des données au serveur se fait comme ça:

//Recuperation du service elephant_io elephant_io = $this->container->get( 'elephant_client.your_key ); //Envoie du message au serveur push elephant_io->send( $message, $datas );
Defy, il y a 9 ans

deja on peut voir dans ton server que le port express est 8080 tu a deja teste avec ce port?

Steeve VERDIEU, il y a 9 ans

Ben... C'est la première fois que je fais du Node Js. Alors, comment je peux tester le port 8080?

Steeve VERDIEU, il y a 9 ans

Quand j'ajoute l'url de mon Api Rest:

io.set('origins', '*:*, api-bt.webmobilexpert.com');

J'obtiens cette erreur:

"The server returned an unexpected value. Expected \"HTTP\/1.1 101\", had \"\"
Defy, il y a 9 ans

on vas reprendre depuis le debut.

ton server nodejs il est ou?
ton server symfony il est ou?
ton client est fait en quoi?

Defy, il y a 9 ans

ton client se connecte a quel server?
ton server node est derriere un proxy comme nginx ou apache?

Steeve VERDIEU, il y a 9 ans

Mon client se connecte à l'api ===>> Car le client envoie des données a l'api qui se charge de les enregistrer en base de données.
Mon client se connecte aussi au serveur NodeJs ==>> Car il recupere les messages que propage le serveur node.
Mon Api se connecte au serveur Node ==>> Car il lui passe, seulement quand c'est necessaire, des messages indiquant les mises à jour qui vient de se passer en base de données.

Au fait, mon hebergement node tourne grace à "Passenger", qui, selon ce que j'ai lu tourne derriere nginx. mais moi, personnelement, je n'ai aucun code dans mon application node qui touche à ngnix :(

Defy, il y a 9 ans

c'est ton client qui n'arrive pas à se connecter?
l'adresse que tu utilise en local pour te connecter c'est quoi?
tu as des soucie pour te connecter a quel server et par quel moyen?

client -> symfony?
client -> push?
symfony -> push?

Steeve VERDIEU, il y a 9 ans

Je crois plutot que c'est dmon api qui n'arrive pas a se connecter ( symfony -> push ).
Pourquoi?
Eh bien, j'ai fait un test de connextion sur mon client en demandant a mon serveur push de renvoyer un message au client lorsqu'il se connecte:

//On se connecte a socket.io io.sockets.on( 'connection', ( socket ) => { socket.emit( 'connect_message', 'Tu es connecté Steeve' ); });

Effectivement, je recois ce message chez mon client a chaque fois je rafraichi ma page.

Malheureusement je n'ai pas de moyen pour faire de meme pour mon api. Mais le probleme en question est obtenue a chaque que mon client envoie une requette a l'api lui demandant de se connecter au serveur push. :(

Steeve VERDIEU, il y a 9 ans

Faut que tu m'aides vraiment @Defy... Le projet est presque terminé, c'est ce qui me bloque a present. Il faut que je termine tout la semaine prochaine :(

Defy, il y a 9 ans

socket.io.on c'est juste le declencheur de l'event pas la connection au server. faut regarder dans la doc de socket.io comment faire.

DariosDjimado, il y a 9 ans

précise le port 8080 pour voir, je crois que Passenger va se charger du reste

nc_elephant_io: clients: default: connection: http://battle-push-test.webmobilexpert.com:8080 # specify version 0.x for 0.* version and 1.x for 1.0 version version: 0.x your_key: connection: http://battle-push-test.webmobilexpert.com/ version: 1.x
Steeve VERDIEU, il y a 9 ans

Ok, je vais tenter le coup mon ami :)

Steeve VERDIEU, il y a 9 ans

Malheureusement, en precisant le port, meme le client n'arrive pas a se connecter :(

Steeve VERDIEU, il y a 9 ans

Aucune aide depuis?

Steeve VERDIEU, il y a 9 ans

Mais pourquoi ca marche en localhost, alors que ca plante sur le serveur? Est ce au niveau de mon PHP? J'ai lu que le bundle que j'utilise etait fait pour symfony2, mais je suis en symfony3. Est ce que ca peut poser le probleme?