2012-06-13 5 views
1

Je travaille sur un projet de développement web impliquant des websockets. Tout va bien sur le serveur local, en utilisant le serveur wamp.Déploiement Websockets en ligne

Problèmes survenus en ligne, le serveur dédié est bien configuré pour websocket (l'extension php est activée) et je peux exécuter le serveur sans aucun problème. Néanmoins, la connexion échoue, le client ne peut pas être connecté. Ce n'est pas un problème de port ou de pare-feu, le client peut accéder au serveur mais la poignée de main reste inachevée.

J'utilise PHPWebSocket:

Il n'y a pas beaucoup de documentation sur le déploiement de websockets sur un serveur web, il fonctionne bien dans locale generaly.

Si quelqu'un a rencontré le même problème ou avoir une idée de ce qui se passe mal ...

+0

Etes-vous sûr qu'il n'y a pas de pare-feu ou de routage? Certains proxy (comme mod_proxy) peuvent casser les communications websocket. –

+0

Un pare-feu aurait-il dû bloquer directement la connexion? – Xr17

+0

Il peut être incapable de le transférer correctement, s'il ne sait pas comment gérer ce cas particulier et fait des suppositions incorrectes (obsolètes) concernant http. Je suis sûr que certains proxy sont incompatibles, je ne sais pas pour les firewalls mais c'est peut-être possible. –

Répondre

0

Problème résolu

ID d'utilisation des PHPwebsocket pour différencier les clients et les sockets associés.

Ainsi, le $ this-> lire, nous avons quelques couples:

clientID => prises

Le problème est là, la fonction socket_select ne se soucient pas id. Ainsi, en fonction de la mise en œuvre ...

sur local (Windows)

entrée

:

{ 
0 => ressource #5, 
1 => ressource #6 
} 

sortie:

{ 
**1** => ressource #6 
} 

en ligne (Debian)

entrée:

{ 
0 => ressource #5, 
1 => ressource #6 
} 

sortie:

{ 
**0** => ressource #6 
} 

La relation est de garder plus sur le second cas, ce qui cause un problème sur le reste du processus.

Pour résoudre ce problème, ajouter une boucle à redéfinie id:

foreach($this->wsRead as $id => $socket2){ 
    if($socket2 ==$socket) 
    $clientID = $id; 
    } 

Après est réglé sur la bonne valeur de la boucle de clientID $.