php三种实现多线程类似的详解

来源:文书网 9.22K

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]);

}

热门标签