2012-03-30 102 views
0

我正在製作一個由php腳本控制的服務器,我有客戶端(androidphones),他們調用這些腳本來控制服務器。我保存了php的數據庫的IP地址。PHP請求檢查客戶端是否可通過IP

現在我正在尋找一種方法來檢查,如果這些IP的依舊可達..

這是我試過到目前爲止:

  • cron作業 - >我與開發usbwebserver所以我不能使用從CMD的PHP

  • 作出從PHP腳本的IP ping請求:如果可用它將返回相當「快」,但如果它失敗,我得到最大excution錯誤。這種工作方式讓我得到我想要的結果,但沒有線程化的可能性,這個解決方案不會按照我的想法按時完成。這種方法有效嗎?

  • 東西我考慮: -

    • 提出請求通過HTTP脫裝置,並且做的結果我回來的東西,是這甚至可能(使從服務器到客戶端的請求) ?
    • 製作一個python腳本,從db獲取ip並進行ping調用並將結果存儲回db。
    • 使時間戳當一個設備連接,並從其他設備檢查時間戳,如果最大時間超過,則更新DB

有什麼建議?

+2

我敢肯定,99.9%的終端用戶家庭路由器默認設置爲不響應ICMP坪也路線需要適當的設備響應,您的客戶端或Android將不會有一個服務與運行打開端口以響應ping。這是一個棘手的問題,可能會讓你更好地使用客戶端的心跳,並使用超時。如果客戶端正在請求數據,那麼它的在線。 – 2012-03-30 12:02:34

+0

即使您成功ping通IP,這並不意味着您到達發出原始請求的設備。我猜想大多數移動設備每次重新連接到網絡時都會得到一個新的IP地址,不是嗎? – 2012-03-30 12:03:12

+0

@LawrenceCherone我已經ping到android沒有問題...我會嘗試心跳的方法。thx回覆。對於其他replier:如果他們失去了連接設備仍然需要通過PHP捕捉新的IP ..所以IP是最新的。順便說一句我正在使用這在lan網絡 – Tobrun 2012-03-30 12:04:24

回答

0

這將無法正常工作,因爲您將始終必須讓您的客戶端響應。我建議使用客戶端(例如在使用javascript的html中)每分鐘從客戶端腳本連接到您的服務器,並在您的cronjobs中讓腳本每x分鐘運行一次以更新客戶端, t在x內。

+0

我沒有可能使用cronjobs .. – Tobrun 2012-03-30 12:09:32

+0

好吧,然後我建議每次腳本執行,讓它檢查/更新。另外,你可以使用PHP,通過製作一個單獨的地圖,並禁用PHP腳本的最大執行時間。在這種情況下,你可以執行一個無處不在的腳本;通過使用PHP睡眠()你可以設置一個延遲。 – ArendE 2012-03-30 23:47:33

0

這種檢查絕對沒有意義。
你將永遠擁有這些知識產權。
只是因爲Android客戶端很少有一個真正的IP,但通過某些路由器/代理使用Net。

Web是單向的道路。 要實現一個心跳功能,你必須讓你的Android客戶端ping服務器。

相關問題