2014-04-11 3 views
0

이것이 가능한지 확실하지는 않지만 여기서는 확실하지 않습니다. 여러 클라이언트가 프로그램을 실행할 수있는 간단한 서버를 설정했습니다. 클라이언트가 스크립트를 실행하여 프로그램을 시작할 때마다 프로그램의 새 인스턴스가 시작됩니다. 이제 클라이언트가 다른 스크립트를 통해 프로그램 실행을 중지하면 프로그램의 인스턴스가 종료됩니다. 문제는 다른 클라이언트가 동시에 인스턴스를 죽이는 프로그램을 실행하면서 서버에있는 경우입니다. 특정 인스턴스를 특정 클라이언트에 연결하는 방법이 있습니까?프로세스의 단일 인스턴스 종료

자세한 내용은 다음과 같습니다. 서버는 인터넷에서 미디어를 스트리밍하는 데 사용됩니다. TV에 스트리밍 장치가 연결되어 있습니다. 특정 채널을 선택하면 서버에 신호를 보내고 서버는 여러 스크립트를 실행합니다. 하나는 ffmpeg라는 프로그램을 통해 비디오 변환 프로세스를 시작하는 스크립트입니다. ffmpeg는 스트림을 덮어서 서버의 폴더에 저장하여 스트리밍 장치/tv에서 사용할 수 있도록합니다. 사용자가 채널을 시작할 때마다 ffmpeg의 인스턴스가 다른 스트림을 변환하기 때문에 인스턴스가 시작됩니다. 일단 사용자가보기를 끝내면, 장치는 PHP 스크립트를 통해 다시 서버로 신호를 보냅니다. 그러면 PHP 스크립트는 정리라고하는 스크립트를 실행합니다. 클린업 스크립트는 ffmpeg를 죽이고 더 이상 필요없는 파일을 삭제하는 bat 파일입니다. 한 사람이보기를 멈추고 다른 사람은 계속하는 것을 제외하고는 모두 훌륭한 작품입니다. 나는 ffmpeg의 각 인스턴스의 차이를 어떻게 표현해야할지 모르겠다. 끝내야하는 특정 스트림에 연결된 인스턴스 만 모든 인스턴스를 종료하지 않기를 바랍니다. 사용자가 처음 채널을 선택할 때 각 장치의 IP 주소를 가져올 수 있습니다. 특정 인스턴스에 ip를 링크 할 여지가 있습니까?

+0

나는 당신이 우리에게 코드를 보여줄 필요가 있다고 생각한다. 서버가 클라이언트를 찾은 것을 탐지 할 수 있는가? 그렇다면 자살 할 수 있습니다. 클라이언트가 서버를 종료한다고 알릴 수 있습니까? 그렇다면 서버가 스스로를 죽일 수 있습니다. http://stefan.buettcher.org/cs/conn_closed.html –

+1

여기에 벽이없는 아이디어가 있습니다. 어쩌면 "ffmpeg.exe"를 실행하기 전에 새 이름으로 복사 할 수 있습니다. 그러면 " ffmpeg "라고 표시합니다. 따라서 클라이언트의 IP 주소가 192.168.0.34이고, 실행하기 전에 "ffmpeg.exe"를 "ffmpeg.192.168.0.34.exe"로 변경 한 다음 죽일 인스턴스를 알면 :-) –

+0

아이디어를 제공해 주셔서 감사합니다. 나는 그것을 시도 할 수도 있지만 아마 각 netstat을 사용할 수 있고 새로운 인스턴스가 다른 PID를 사용하기 때문에 정보를 조작 할 수 있다고 생각합니다. 다시 한 번 감사드립니다. –

답변

0

실제로 위에서 조언을 듣고 각 인스턴스의 이름을 ip로 변경하고 임시 파일에 ip를 저장 한 다음 IP에 취소 호출을 매치 할 수있었습니다.