」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 PHP 中非同步執行 cURL 請求?

如何在 PHP 中非同步執行 cURL 請求?

發佈於2024-11-08
瀏覽:102

How Can I Execute cURL Requests Asynchronously in PHP?

PHP中的非同步Curl請求

在PHP中非同步執行curl post請求可以提高效能並防止潛在的延遲。以下是如何使用不同的方法實現此目的:

使用非同步 cURL 函數

使用curl_multi_*時,您可以同時執行多個 cURL 要求。以下是一個範例程式碼:

$curl = curl_init($request);
curl_setopt($curl, CURLOPT_URL, $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, $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":"'.$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,$curl);

$active = null;
//execute the handles
do {
    $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 handles
curl_multi_remove_handle($mh, $curl);
curl_multi_close($mh);

使用 pThreads

pThreads 是 PHP 的執行緒函式庫。以下是如何將它用於非同步curl請求:

class Request1 extends Thread {
    public function run() {
        // Execute the first cURL request here
    }
}

class Request2 extends Thread {
    public function run() {
        // Execute the second cURL request here
    }
}

$req1 = new Request1();
$req1->start();
$req2 = new Request2();
$req2->start();

兩種方法都允許非同步執行curl請求,從而實現更好的效能和高效處理並行任務。

最新教學 更多>
  • 如何計算 Python 中 ndarray 的出現次數?
    如何計算 Python 中 ndarray 的出現次數?
    計數ndarray 中的出現次數在numpy 中,嘗試執行以下操作時可能會遇到錯誤「numpy.ndarray 物件沒有屬性計數」使用.count() 方法來計算陣列中特定值的出現次數。 使用numpy.unique解決這個問題的方法是使用 numpy.unique()。此函數識別數組中的唯一值並提...
    程式設計 發佈於2024-11-08
  • 似乎沒有人談論的一件事
    似乎沒有人談論的一件事
    我認為我們大多數軟體開發人員發生的第一件事導致我們失去希望,那就是我們被迫走捷徑。 我們基本上被告知你必須在一定的期限內完成。 我們開始做一些工作,當我們接近最後期限時,我們不可避免地意識到這將花費我們比我們想像的更長的時間。 如果您一直在編程或進行軟體開發。 無論您是從事維運、使用者體驗或...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中從數組產生查詢字串?
    如何在 PHP 中從數組產生查詢字串?
    在PHP 中從陣列建立查詢字串PHP 框架提供了專門為從陣列建立查詢字串而設計的多功能函數:http_build_query()。此函數的主要目的是將鍵值對陣列轉換為標準 URL 編碼的查詢字串。 使用http_build_query()http_build_query( 的語法)如下:string...
    程式設計 發佈於2024-11-08
  • JavaScript 中基本物件和函數連結的原則是什麼?
    JavaScript 中基本物件和函數連結的原則是什麼?
    了解 JavaScript 中的基本物件/函數鏈函數鍊是一種程式設計技術,可讓開發人員建立按特定順序執行的操作序列。在 JavaScript 中,這是透過傳回函數本身和使用 this 關鍵字結合來實現的。 要了解連結的原理,讓我們來看一個工作範例:var one = function(num) { ...
    程式設計 發佈於2024-11-08
  • 開發工具不是必需的
    開發工具不是必需的
    幾個月前我正在開發一個前端專案。該專案是一個微前端,旨在整合到遺留儀表板上。 採用微前端方法的原因是為了降低儀表板上的複雜度。我對這個挑戰感到興奮並投入其中。 我使用 webpack、react 和 typescript 設定微前端。我使用 chakra ui 作為 CSS-IN-JS 框架,使...
    程式設計 發佈於2024-11-08
  • OpenAI 在簡化程式碼方面出奇地好
    OpenAI 在簡化程式碼方面出奇地好
    While browsing the Internet for inspiration, I came across an interesting-looking component. I thought the block with the running ASCII art looked coo...
    程式設計 發佈於2024-11-08
  • 有毒的 Laravel 社區如何摧毀了我對程式設計的熱情。
    有毒的 Laravel 社區如何摧毀了我對程式設計的熱情。
    我仍然记得那件事就像昨天一样,但当我踏上成为一名 Web 开发人员的旅程时,已经是二十多年前了。 我拨打了我的 56k 调制解调器,占用了电话线,这样我就可以浏览一些我最喜欢的网站。然后我想知道如何自己制作。 我发现我可以在 Microsoft Word 中处理 HTML。我创建了一个包含滚动字幕、...
    程式設計 發佈於2024-11-08
  • 與工人一起部署
    與工人一起部署
    按鈕產生器 按鈕產生器是一款旨在簡化 GitHub 上託管專案的部署流程的工具。透過建立「部署到 Cloudflare Workers」按鈕,您可以簡化部署流程,讓使用者只需按一下即可將您的應用程式部署到 Cloudflare Workers。 此按鈕為使用者提供了一種將專案直接...
    程式設計 發佈於2024-11-08
  • 使用 PHP 操作字串
    使用 PHP 操作字串
    字串是程式設計中用來表示字元序列的資料型別。這些字元可以是字母、數字、空格、符號等。在許多程式語言中,字串用單引號 (') 或雙引號 (") 括起來。 字串連線 連接是將兩個或多個字串連接在一起的過程。 <?php $name = "John"; $lastname = "...
    程式設計 發佈於2024-11-08
  • jQuery 可以幫助使用 Comet 模式進行伺服器傳送訊息嗎?
    jQuery 可以幫助使用 Comet 模式進行伺服器傳送訊息嗎?
    利用Comet 透過jQuery 進行伺服器傳送訊息在JavaScript 程式設計領域,伺服器推播功能已經獲得了突出地位,彗星設計模式正在成為一種流行的方法。本文探討了建構在著名 jQuery 函式庫之上的此類解決方案的可用性。 基於 jQuery 的 Comet 實現儘管 Comet 模式很流行...
    程式設計 發佈於2024-11-08
  • 如何在 Keras 中實作 Dice 誤差係數的自訂損失函數?
    如何在 Keras 中實作 Dice 誤差係數的自訂損失函數?
    Keras 中的自訂損失函數:實作Dice 誤差係數在本文中,我們將探討如何建立自訂損失函數在Keras 中,聚焦在Dice 誤差係數。我們將學習實現參數化係數並將其包裝以與 Keras 的要求相容。 實現係數我們的自訂損失函數將需要係數和一個包裝函數。此係數測量 Dice 誤差,該誤差比較目標值和...
    程式設計 發佈於2024-11-08
  • 為什麼 MySQL 會拋出「警告:mysql_fetch_assoc 參數無效」錯誤?
    為什麼 MySQL 會拋出「警告:mysql_fetch_assoc 參數無效」錯誤?
    MySQL 警告:mysql_fetch_assoc 的參數無效問題:嘗試從MySQL 檢索資料時資料庫時,遇到以下錯誤訊息:mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource說明:mysql_fet...
    程式設計 發佈於2024-11-08
  • 在 Python 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在 Python 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在ElementTree 的“find”和“findall”方法中忽略XML 命名空間使用ElementTree 模組解析和定位XML 文件中的元素時,命名空間會帶來複雜性。以下介紹如何在 Python 中使用「find」和「findall」方法時忽略命名空間。 當 XML 文件包含命名空間時,會導...
    程式設計 發佈於2024-11-08
  • 為什麼在 Node.js 應用程式中連接到 MySQL 時出現「connect ECONNREFUSED」錯誤?
    為什麼在 Node.js 應用程式中連接到 MySQL 時出現「connect ECONNREFUSED」錯誤?
    Node.js MySQL:解決「connect ECONNREFUSED」錯誤將Node.js 應用程式部署到遠端伺服器時,您可以嘗試建立與MySQL 資料庫的連線時遇到「connect ECONNREFUSED」錯誤。當 MySQL 連線參數中提供的主機配置不正確時,通常會出現此問題。 在您的特...
    程式設計 發佈於2024-11-08
  • 用 Go 建構密碼管理器
    用 Go 建構密碼管理器
    作为一名软件开发人员,我一直对安全性和可用性的交集着迷。最近,我决定开始一个令人兴奋的项目:使用 Go 创建一个命令行密码管理器。我想与您分享这段旅程的开始,从第一次提交开始。 创世记 2023 年 11 月 27 日,我对我的项目进行了初步提交,我将其命名为“dost”(印地语中的...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3