Problème de connexion pour certains clients

L'auteur de ce sujet a trouvé une solution à son problème.

En effet si le port 1338 est bloqué, le client ne peut pas fetcher le socket.io.js qui définit la globale "io", d'où le "io is not defined" (mais même si tu fournissais le script d'une autre manière la connexion au socket serait bloquée). Tu auras en effet un conflit si tu essayes de faire écouter le port 80 à socket.io si tu l'utilises déjà pour ton back-end PHP (en revanche si ton back-end était en NodeJS tu pourrais le mettre sur le même port). Ce que tu peux faire, c'est ouvrir un sous-domaine, et faire un proxy pour forwarder tout ça vers socket.io. Par exemple tu fais pointer socket.tondomaine.com vers ton serveur, et tu fais un VirtualHost avec Apache ou équivalent qui redirige toutes les requêtes qui proviennent de socket.tondomaine.com vers localhost:1338. Tu pourras alors accéder à socket.io depuis socket.tondomaine.com au lieu de tondomaine.com:1338, et tu n'auras plus de problème de port filtré.

+1 -0

Ca sera réellement un :80 : imaginons que socket.domaine.com et domaine.com pointe vers ton serveur. Que j'essaye de me connecter à socket.domaine.com ou domaine.com, ton serveur va recevoir une requête sur le port 80 (http://socket.domaine.com <=> http://socket.domaine.com:80 et http://domaine.com <=> http://domaine.com:80). En revanche, le fait d'utiliser deux domaines différents te permet de facilement séparer le traitement des requêtes une fois qu'elles atteignent ton serveur, et ce pour un même port (ici 80). En logique pour ton serveur, ça donnerait quelque chose comme ça : lorsque je reçois une requête sur le port 80, si le domaine de provenance est socket.domaine.com, alors transmettre la requête à socket.io ; sinon, transmettre la requête au serveur PHP.

+1 -0

C'est bien ça pour le client. Le server.js tu le laisses écouter le 1338.

Par contre tu dois configurer ton serveur HTTP (Apache ou similaire) pour qu'il forwarde ce qui provient de socket.domaine.com:80 vers localhost:1338. Avec Apache tu peux le faire en utilisant un VirtualHost et les directives ProxyPass et ProxyPassReverse, par contre il faut au moins la version 2.4 d'Apache pour pouvoir proxy-er les WebSockets (http://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html).

Pour info tu peux aussi t'en sortir avec un seul domaine en forwardant domaine.com/une_route vers socket.io, c'est le même fonctionnement sauf que tu dois écrire une règle qui prend en compte toutes les routes qui vont être utilisées pour les WebSockets.

Aussi, ça ne répond pas vraiment à ta question mais le plus simple reste d'avoir deux serveurs :).

Édité par uregoismyfriend

+0 -0

Il ne faut pas faire une redirection (pas de flag R), mais tu ne devrais pas avoir d'erreur 500.

Quelle version de Apache est-ce que vous utilisez ?

mod_rewrite est bien activé ?

Il faudrait aussi faire passer la route entière à socket.io, donc faire en sorte que ce que tu captures dans la RegExp soit passé dans la réécriture. Je suis pas sûr de ce que tu captures mais ça doit ressembler à ça :

1
RewriteRule (.*) http://rencontre-ados.net:8080/$1 [QSA,L]
+0 -0

Cette réponse a aidé l'auteur du sujet

Je sais pas trop ce que fait directadmin mais normalement ton VirtualHost devrait ressembler à ça :

1
2
3
4
<VirtualHost *:80>
  ServerName socket.rencontre-ados.net
  ProxyPass / http://socket.rencontre-ados.net:8080
  ProxyPassReverse / http://socket.rencontre-ados.net:8080

Et aussi tu ne devrais pas avoir besoin de mettre quoi que ce soit dans public_html, c'est peut-être ça qui pose problème. Donc vire le dossier /socket/ de public/web.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte