如題,自己本想寫個在網(wǎng)頁里實現(xiàn)向aria2提交下載任務(wù)的功能,使用到php的curl擴展來向aria2的rpc服務(wù)提交下載任務(wù),發(fā)現(xiàn)在aria2沒有開啟的情況下,會出出現(xiàn)curl長時間等待的情況,就會出現(xiàn)整個worker進程被curl阻塞,無法響應其他正常請求,即使設(shè)置了curl的超時時間為毫秒級也沒有用(curl_setopt($ch, CURLOPT_TIMEOUT_MS,$outtime);),大概會阻塞5秒
起初還以為是其他請求代碼造成了超時,所以先把其他業(yè)務(wù)代碼刪除了,直接在onmessage里new aria2對象來實驗
curl執(zhí)行curl_exec耗時記錄,超時毫秒數(shù)設(shè)置由post方法的參數(shù)傳入,執(zhí)行前記錄到t0,執(zhí)行后記錄到t1,然后輸出差值
我的post方法超時設(shè)置為200毫秒
這是官方網(wǎng)站上下載的靜態(tài)php版本執(zhí)行的情況,可以看到啟動命令是./php,版本是8.3.12,截圖里輸出yy5.00995,就是阻塞耗時5秒,而上面post方法傳入的超時為200毫秒
這是用我系統(tǒng)的php執(zhí)行情況,可以看到啟動命令是php,版本是8.2.6。截圖里輸出yy0.0071709,阻塞就沒有那么嚴重
這里寫具體的系統(tǒng)環(huán)境相關(guān)信息
ubuntu
PHP的curl要設(shè)置毫秒超時的話,需要設(shè)置 curl_setopt ( $ch, CURLOPT_NOSIGNAL, true);
解決了,原來是今天修改了aria2類,修改時無意中導致aria2類中的aria2RPC地址出錯了,剛開始按照你給出的帖子(http://www.wtbis.cn/q/11441)修改了系統(tǒng)配置,也有1秒的阻塞,顯然這個耗時也不行。最后無奈又把備份的代碼拿來試,結(jié)果老代碼沒有問題了,就仔細從頭檢查了一下今天修改過的aria2類,一下就發(fā)現(xiàn)了是RPC地址出錯了。不過仍然讓我困惑的就是,同樣一份代碼(指aria2RPC地址配置出錯),靜態(tài)PHP與系統(tǒng)內(nèi)安裝的php就會有區(qū)別,從上圖可以看到系統(tǒng)內(nèi)安裝的php版本,似乎并沒有受aria2RPC地址配置出錯的影響,依然可以做到毫秒級響應。而靜態(tài)PHP就會受影響。