2012-12-18 2 views
2

Я использую PHP-Websockets для создания простого чат-сервера. У меня все работает правильно, когда я запускаю php-скрипт, который впервые создает веб-узел на моем сервере. Если сценарий останавливается по какой-то причине, и я пытаюсь перезапустить его, я получаю сообщение о том, что скрипт не может связывать сокет, потому что он уже существует.Закрытие старого php websocket

Как создать скрипт, чтобы найти этот старый сокет (учитывая, что я знаю, какой порт он работает) и закрыть его, чтобы я мог создать новое соединение?

+0

Вы можете использовать метод 'disconnect' в этом классе для отсоединения, если он уже подключен –

+0

. К какому методу разъединения вы относитесь? Я не могу найти его на этой странице функций php - http://php.net/manual/en/ref.sockets.php – anonymousfox

+0

Вам нужно выяснить, как включить 'SO_REUSEADDR'. –

ответ

2

Если у вас есть доступ к оболочке, я бы использовал следующую команду для вывода PID процесса с помощью этого сокета (порта).

netstat --tcp --listening --program 

Затем убейте этот процесс.

kill %pid% 

Чтобы предотвратить это, я бы дважды проверял, что ваш скрипт завершается изящно и сначала закрывает сокет.

+0

Спасибо, Джон, это сработает, но я пытаюсь выяснить способ моего сервера справиться с этой функцией без моего входа в систему, чтобы сделать это вручную. Что касается правильного завершения скрипта, он делает это. Я пытаюсь реализовать это как наихудший senario, поэтому мои функции чата всегда работают. – anonymousfox

+0

@anonymousfox: Когда вы делаете это вручную, в каком процессе вы заканчиваете убийство? –

+0

@DavidSchwartz На самом деле я говорил слишком быстро. Я думал, что то, что сказал Джон, будет работать, но когда я попробую, никакого процесса не будет указано, связанного с сокетом. И когда я убиваю/перезапускает apache, он ничего не делает для websocket. Единственное, что я могу сделать, это перезагрузить сервер. – anonymousfox

Смежные вопросы