2014-04-11 45 views
0

不知道這是否可能,但在這裏。我有一個簡單的服務器設置在多個客戶端可以執行程序。每次客戶端執行腳本啓動程序時,都會啓動一個新的程序實例。現在當客戶端通過另一個腳本停止程序執行時,程序的實例被終止。問題是如果另一個客戶端在運行程序的同時在服務器上,該實例也將被終止。有沒有辦法將特定的實例連接到特定的客戶端?終止進程的單個實例

這裏有更多的細節。 服務器用於從互聯網流媒體。我有流媒體設備連接到電視。當選擇一個特定的頻道時,它會向服務器發送一個信號,然後運行幾個腳本,其中一個腳本通過一個名爲ffmpeg的程序啓動視頻轉換過程。 ffmpeg轉換流,將其保存到服務器上的文件夾中,使其可用於流設備/電視。每次用戶啓動一個頻道時,ffmpeg的一個實例就會啓動,因爲它轉換了一個不同的流。一旦用戶結束查看,設備會通過php腳本將信號發送回服務器,然後運行一個名爲cleanup的腳本。清理腳本是殺死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進行取消調用相匹配。