2013-10-04 20 views
1

你好是PHP:curl_multi_select函數適合每隔10秒執行一次curl_exec嗎?我想每10秒執行一次culr_exec並在完成時收集結果。我無法弄清楚如何開始。如何每10秒執行一次curl_exec並在完成時收集結果

+0

應該是可能的。很難解釋而沒有給你完整的答案。你知道'select()'系統調用是如何工作的嗎? – hek2mgl

+0

我知道這個系統有點。我嘗試改變超時時間,但它沒有效果,因爲只要資源釋放一個新的curl_exec就會被執行,並且這可能會在不到10秒的時間內發生。在循環中放置一個Sleep(10)甚至沒有幫助,不知何故,我總是從curl_exec得到0響應,不知道爲什麼。 –

+0

這將是可能的在PHP中,但它將是一個黑客攻擊。如果你有選擇,那麼使用支持python這樣的線程的語言或者pthread php擴展 – hek2mgl

回答

1

我傾向於思考curl_multi_select()是不是你想在這裏使用。從該文檔:

INT curl_multi_select(資源$ MH [,浮子$超時= 1.0])

塊,直到有在任何curl_multi連接的活性。

mh - 由curl_multi_init()返回的cURL多重句柄。

timeout - 等待響應的時間,以秒爲單位。

curl_multi_init()是專爲「並行處理多個cURL句柄」而設計的,這不是你要找的。

如果您需要處理curl_exec()每10秒,你有幾個選擇:

  • 使用調度工具來執行腳本每10s和存儲數據。 (cron也許)
  • 在手動運行的bash或python中編寫一個包裝腳本,該腳本每10秒啓動一次php腳本。

您可以在PHP中使用後者,但是您必須增加最大執行時間,因爲您會以相對較快的速度達到最大執行時間。

+0

如果某個請求可能需要10秒以上的時間,curl_multi_select就是要走的路。這將需要並行打開多個請求。當然這個功能只是解決方案的一部分。我期望如果通過NULL,超時值爲零。至少select()函數以這種方式工作 – hek2mgl

+0

如何安全地在PHP中調度請求,我的意思是有些請求可能需要超過10秒而其他請求不到。所以要求完成答案。 –

+0

@ClaudioFerraro我不會從頭開始爲你寫的。我已經給你足夠的開始和一些事情嘗試。 「詢問代碼的問題必須對所解決的問題有一個最基本的理解,包括嘗試的解決方案,爲什麼他們不工作,以及預期的結果。」 http://stackoverflow.com/help/on-topic –

相關問題