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?
tu dois pouvoir spécifier un port comme cela
http://@ip_d_ton_serveur:8080/BattleTub-admin/web/app_dev.php
Ben... C'est pas trop clair. Comment j'arrive à remplacer localhost par l'ip:port?
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' );
});
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 );
Ben... C'est la première fois que je fais du Node Js. Alors, comment je peux tester le port 8080?
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 \"\"
on vas reprendre depuis le debut.
ton server nodejs il est ou?
ton server symfony il est ou?
ton client est fait en quoi?
Mon serveur PHP est sur : http://api-bt.webmobilexpert.com
Mon serveur nodeJs est: http://battle-push-test.webmobilexpert.com
Mon client est fait en Angular2
ton client se connecte a quel server?
ton server node est derriere un proxy comme nginx ou apache?
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 :(
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?
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. :(
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 :(
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.
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
Malheureusement, en precisant le port, meme le client n'arrive pas a se connecter :(
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?