當前位置:才華齋>計算機>php語言>

php三種實現多執行緒類似的詳解

php語言 閱讀(8.26K)

php三種實現多執行緒類似的方法,需要的朋友可以參考下,就跟隨本站小編一起去了解下吧,想了解更多相關資訊請持續關注我們應屆畢業生考試網!

php三種實現多執行緒類似的詳解

  1、curl_multi方法

當需要多執行緒的時候,可以用curl_multi一次性請求多個操作來完成,但curl走的是網路通訊,效率與可靠性就比較差了的。

function main(){

$sql = "select waybill_id,order_id from waybill where status>40 order by update_time desc limit 10 ";

$data = Yii::app()->db->createCommand($sql)->queryAll(); //yii 框架格式

foreach ($data as $k => $v) {

if ($k % 2 == 0) { //偶數發一個網址

$send_data[$k]['url'] = '';

$send_data[$k]['body'] = $v['waybill_id'];

} else { //奇數傳送另外一個網址

$send_data[$k]['url'] = '';

$send_data[$k]['body']=array($v['order_id'] => array('extra' => 16));

}

}

$back_data =sendMulitRequest($send_data);

var_dump($back_data);

}

function sendMulitRequest($send_data){

$params = array();

$curl = $text = array();

$handle = curl_multi_init();

foreach ($data as $k => $v) {

if (empty($v['url'])) {

$v['url'] = ""; //if url is empty,set defalut url

}

$reqBody = json_encode($v['body']);

$reqStream = array(

'body' => $reqBody,

);

$encRequest = base64_encode(json_encode($reqStream));

$params['data'] = $encRequest;

$curl[$k] = curl_init();

curl_setopt($curl[$k], CURLOPT_URL, $v['url']);

curl_setopt($curl[$k], CURLOPT_POST, TRUE);

curl_setopt($curl[$k], CURLOPT_HEADER, 0);

curl_setopt($curl[$k], CURLOPT_POSTFIELDS, http_build_query($params));

curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, 1);

curl_multi_add_handle($handle, $curl[$k]);

}