因此,您要做的是异步执行cUrl请求。
因此,您将需要一个用于php的异步/并行处理库。
p线程
php的著名线程库之一是
pthreads
您首先需要获取dll / so文件并将其保存在
php/extdir中,然后在中启用该扩展名
php.ini。
之后,此代码将完成您的工作:
class Request1 extends Thread { $username = 'xxxxx'; $api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $url_onfleet = "https://onfleet.com/api/v2/tasks"; public function run() { curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); $request = $this->url.'api/mail.send.json'; // Generate curl request $session = curl_init($request); // Tell curl to use HTTP POST curl_setopt ($session, CURLOPT_POST, true); // Tell curl that this is the body of the POST curl_setopt ($session, CURLOPT_POSTFIELDS, $params); // Tell curl not to return headers, but do return the response curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // obtain response $response = curl_exec($session); curl_close($session); }}class Request2 extends Thread { $username = 'xxxxx'; $api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $url_onfleet = "https://onfleet.com/api/v2/tasks"; public function run() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url_onfleet); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERPWD, $this->api_onfleet); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$pickup_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"completeBefore":'.$timestamp.',"pickupTask":"yes","autoAssign":{"mode":"distance"}}'); $result_pickup = curl_exec($ch); curl_close($ch); // Post the Dropoff task to onfleet $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $this->url_onfleet); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_USERPWD, $this->api_onfleet); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_ENCODING, ""); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$dropoff_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"autoAssign":{"mode":"distance"}}'); $result_dropoff = curl_exec($curl); curl_close($curl); }}$req1 = new Request1();$req1->start();$req2 = new Request2();$req2->start();
因此,基本上,您需要创建一个扩展
Thread该类的类,并且要异步运行(而是并行运行)的所有内容都将放入
run()该类的函数中。
当您想启动线程时,只需在变量中实例化类,然后调用对象的start方法,就像,
$threadsObject->start()并且其中的所有内容都
run()将在另一个线程上执行。
参考:
class::Thread
Thread::start
而已。
异步cURL
另一种方法是使用内置的异步cURL函数。
因此,使用时
curl_multi_*,您的代码将类似于:
$username = 'xxxxx'; $api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $url_onfleet = "https://onfleet.com/api/v2/tasks";curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); $request = $url.'api/mail.send.json'; // Generate curl request $session = curl_init($request); // Tell curl to use HTTP POST curl_setopt ($session, CURLOPT_POST, true); // Tell curl that this is the body of the POST curl_setopt ($session, CURLOPT_POSTFIELDS, $params); // Tell curl not to return headers, but do return the response curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Post the Pickup task to onfleet $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url_onfleet); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERPWD, $api_onfleet); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$pickup_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"completeBefore":'.$timestamp.',"pickupTask":"yes","autoAssign":{"mode":"distance"}}');$mh = curl_multi_init();curl_multi_add_handle($mh,$session);curl_multi_add_handle($mh,$ch);$active = null;//execute the handlesdo { $mrc = curl_multi_exec($mh, $active);} while ($mrc == CURLM_CALL_MULTI_PERFORM);while ($active && $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); }}//close the handlescurl_multi_remove_handle($mh, $ch1);curl_multi_remove_handle($mh, $ch2);curl_multi_close($mh);
建议阅读:
curl_multi_init()
curl_multi_exec()
curl_multi_add_handle()
curl_multi_remove_handle()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)