2013-01-09 15 views
1

我有一個用PHP編寫的網絡應用程序,我使用Symfony2作爲核心框架。如何有效運行同時發生的網絡請求?

我需要每隔10分鐘左右定期運行數千個小型網絡請求,並且我試圖找到異步運行這些作業的最佳解決方案,而不會發生衝突或加倍。

目前我有一個非常基本和不雅的解決方案,其中一個cron作業執行一個PHP命令腳本。該命令同步處理數據庫中的每個條目併發送網絡請求。當該請求完成(或失敗)時,它將轉到下一個請求。當它迭代了所有條目時,它就存在了,要從cron作業中再次執行。

對於重寫,我已將php-resquepcntl_fork看作並行運行作業的解決方案,從而顯着加快執行速度。我也研究過從PHP運行多個非阻塞套接字請求,但到目前爲止,更喜歡簡單的隔離作業。

+0

發現這篇有用的文章:http://stackoverflow.com/a/14201579/147731 – Ryall

回答

1

PHP不能在傳統意義上進行線程化,所以你試圖做的事情並不是真的可以用你想的方式。您已經在pcntl_fork中查看了最佳解決方案(可能),但這仍然不是真正的異步。你有沒有考慮使用cron來完成這個呢?

+0

我目前使用cron來執行一個PHP命令,然後遍歷數據庫並在每個條目上工作。 – Ryall

+0

'pcntl_fork'仍然是我最好的選擇嗎? – Ryall

+0

這取決於你想要做什麼的細節。您還可以通過系統調用將網絡操作委託給其他進程,例如讓Perl處理網絡操作。 – Madbreaks

1

http://php.net/pthreads

http://github.com/krakjoe/pthreads

在GitHub上的例子...並列入分佈,在github上使用的代碼,它包含的修補程序尚未發佈。

+0

非常有趣,這解決了我所有的問題。閱讀文檔,它提到圖書館仍然是實驗性的。我假設你是作者,所以你現在說多穩定? – Ryall

+0

另外,我將如何在Github上安裝代碼?我從來沒有做過任何PHP模塊的編譯。 – Ryall

+0

http://pthreads.org/Building-這應該讓你開始建設。有一些窗口快照,有時在http://pthreads.org/snapshots。和Windows上的DLL pecl發佈http://windows.php.net/downloads/pecl/releases/pthreads/ ...它非常穩定,無論我說是有偏見,卡住是我最好的建議:) –

相關問題