2012-12-18 3 views
2

간단한 채팅 서버를 만들려면 PHP-Websockets을 사용하고 있습니다. 내 서버에 websocket을 처음으로 생성하는 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

감사합니다 존,이 작동하지만 수동으로 할 로그인하지 않고 내 서버가이 기능을 처리 할 수있는 방법을 찾으려고 노력하고 있습니다. 스크립트가 제대로 끝나는 것처럼, 그렇지 않습니다. 내 채팅 기능이 항상 실행되도록 최악의 시나리오로 구현하려고합니다. – anonymousfox

+0

@anonymousfox : 수동으로 할 때, 어떤 과정을 통해 살인이 끝나나요? –

+0

@DavidSchwartz 사실 나는 너무 빨리 말했습니다. Jon이 말한 것은 작동 할 것이라고 생각했지만 시도 할 때 소켓에 연결된 프로세스가 나열되어 있지 않습니다. 그리고 아파치를 죽이거나 다시 시작하면 웹 소켓에 아무런 영향을 미치지 않습니다. 내가 할 수있는 유일한 방법은 서버를 모두 다시 시작하는 것입니다. – anonymousfox