2011-10-07 11 views
2

,希望有人能指出我在正確的方向,我覺得我密切AJAX調用,以檢查在後臺運行的進程的狀態,我到處尋找這個作回答,一直沒能找到一個超時

我有兩臺主機,讓我們給他們打電話host1.mydomain.com和host2.mydomain.com(避開每臺主機/每瀏覽器問題2個併發連接),所以它們都指向相同的內容一個僅僅是其他

用戶的別名去host1.mydomain.com,輸入一些信息來註冊,點擊進入,它加載在其host2.mydomain.com要求在同一頁面指向一個頁面的iframe一個通過exec(「curl」)發送請求的php腳本在後臺啓動一個網站刮板,進程ID然後存儲在用戶的數據庫中。在iframe成功加載後(只需要1秒,因爲它創建了後臺進程)我在一個間隔上設置了一個AJAX請求,定期檢查cURL進程的狀態(通過它在數據庫中的進程ID),以便我可以顯示刮板的當前步驟(共有6步)。迄今爲止都很好。

的問題是,AJAX請求刮板的第4步後超時(瀏覽器的默認超時一百二十零分之一百十五秒),即使它不應該是因爲我有兩個不同的主機工作...這意味着以說,這是幾乎一樣,如果我在host1.mydomain.com堵塞兩個連接時,我不是因爲我是從主機2

iframe的負荷啓動刮板這個網址:http://host2.mydomain.com/page.php PHP腳本調用的內容:

exec("curl -o /dev/null 'http://host2.mydomain.com/page.php?method=process' > /dev/null & echo $!", $op); 

然後我的ajax請求是輪詢http://host1.mydomain.com/status.php?pid=x哪l在數據庫ooks增長的進程​​ID檢查狀態

,一旦刮到達步驟4,我的AJAX請求超時

我想我感到很困惑解釋這一點,但我希望有人能幫助我

+0

而不是用'exec()'調用CLI curl,它會更清潔地使用PHP的本地cURL庫綁定:http://php.net/curl –

+0

問題是我需要在後臺運行它,你可以通過使用PHP cURL lib來實現嗎?因爲我確實使用它來爲刮板實際刮擦網站..我只是想,因爲我只是調用一個頁面來初始化刮刀這種方式會更容易,並將過程發送到背景 –

+0

此外我需要知道進程ID,以便我可以監視刮板的進度,你將無法從使用PHP的內置cURL庫獲得(至少不是我所知道的) –

回答

3

原來,我成功解決了每個服務器/瀏覽器限制的2個連接......但是在做一些研究時,我發現我的ajax請求掛起的原因是因爲我試圖訪問和寫入會話數據來自兩個請求。挖得更深一些,我發現了一個session_write_close(),它關閉讀/寫的會議上,我基本上有刮刀的每個頁面請求後打電話到這一點,然後重新初始化會話,這使我的Ajax請求要經過並停止封鎖的請求。

,如果你在同樣的問題絆倒

乾杯希望別人認爲這很有用! Jeff

1

而不是等待請求完成,您應該spawn new process它在服務器上的後臺運行。並使用JavaScript來每隔幾秒「查看」以查看執行何時完成。然後,你所要做的就是拿起結果並顯示出來。

另外,你可能希望確保只有一個PHP進程產生。

相關問題