2012-12-18 3 views
2

J'utilise PHP-Websockets pour créer un serveur de discussion simple. J'ai tout fonctionne correctement quand je lance le script php qui crée le websocket sur mon serveur pour la première fois. Si le script s'arrête pour une raison quelconque et que j'essaie de le relancer, j'obtiens une erreur indiquant que le script ne peut pas lier le socket car il existe déjà.Fermeture de l'ancien socket Web php

Comment puis-je créer un script pour trouver cette ancienne socket (étant donné que je connais le port sur lequel elle s'exécute) et la fermer pour pouvoir établir une nouvelle connexion?

+0

Vous pouvez utiliser la méthode 'disconnect' dans cette classe pour vous déconnecter si vous êtes déjà connecté –

+0

De quelle méthode de déconnexion faites-vous référence? Je ne peux pas le trouver sur cette page de fonctions php - http://php.net/manual/en/ref.sockets.php – anonymousfox

+0

Vous devez comprendre comment activer 'SO_REUSEADDR'. –

Répondre

2

Si vous avez un accès shell, j'utiliserais la commande suivante pour déduire le PID du processus utilisant ce socket (port).

netstat --tcp --listening --program 

Ensuite, tuez ce processus. Pour éviter que cela ne se produise, je vérifierais que votre script se termine normalement et ferme le socket en premier.

+0

Merci Jon, cela fonctionnera mais j'essaie de trouver un moyen pour mon serveur de gérer cette fonction sans me connecter pour le faire manuellement. Quant au script se terminant correctement, il le fait. J'essaye de mettre en application ceci comme un sénario de cas le plus mauvais de sorte que ma fonctionnalité de causerie court toujours. – anonymousfox

+0

@ anonymousfox: Quand vous faites cela manuellement, quel processus finissez-vous par tuer? –

+0

@DavidSchwartz En fait, j'ai parlé trop vite. Je pensais que ce que Jon disait fonctionnerait mais quand je l'essaye, aucun processus n'est listé qui soit connecté au socket. Et quand je tue/redémarre apache, il ne fait rien à la websocket. La seule chose que je peux faire est de redémarrer le serveur complètement. – anonymousfox