簡體   English   中英

Amazon SES:如何加快此PHP示例的卷曲速度?

[英]Amazon SES: How to speed-up curl for this PHP example?

我的Amazon Simple Email Service帳戶理論上每秒可以處理14封電子郵件,但是我的代碼每秒只能達到1或2。 感謝您提供有關如何提高HTTP-POST速率的任何幫助。 我在下面粘貼我的代碼以征求想法。 如果可能,請發布您的代碼提示,而不要發布鏈接。 謝謝!

注意:以下代碼包含在引用電子郵件數據庫的foreach循環中。 我通過HTTP-POST發送的每封電子郵件都是個性化的,如$ MAIL字符串中所示,並通過下面的curl代碼塊發送至。 我還應該提到,我不在乎HTTP-POST響應。

$DATE = gmdate('D, d M Y H:i:s e');
$HASH = hash_hmac('sha1', $DATE, $AWSPRI, true);
$KEYS = base64_encode($HASH);
$headers = array();
$headers[] = "Host: email.us-east-1.amazonaws.com";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
$headers[] = "Date: ".$DATE;
  $auth = "AWS3-HTTPS AWSAccessKeyId=".$AWSPUB;
  $auth .= ",Algorithm=HmacSHA1,Signature=".$KEYS;
$headers[] = "X-Amzn-Authorization: ".$auth;
$url = "https://email.us-east-1.amazonaws.com/";
$MAIL =  "Action=SendEmail&Source=".$FROM_ENCODE."&ReturnPath=".$BOUNCE_ENCODE."&Destination.ToAddresses.member.1=".$SUBSCRIBER_ENCODE."&Message.Subject.Data=".$SUBJECT_ENCODE."&Message.Body.Html.Data=".$EMAIL_BODY_ENCODE;
$aws = curl_init();
curl_setopt($aws, CURLOPT_POSTFIELDS, $MAIL);
curl_setopt($aws, CURLOPT_HTTPHEADER, $headers);
curl_setopt($aws, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($aws, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($aws, CURLOPT_HEADER, false);
curl_setopt($aws, CURLOPT_URL, $url);
curl_setopt($aws, CURLOPT_RETURNTRANSFER, true);
curl_exec($aws);
curl_close($aws);

首先,您可以放入一些基准測試代碼來找出瓶頸。

其次,在黑暗中拍攝,您可以重用http連接。

第三,也許是正確的答案,讓一台功能強大的專用服務器位於高帶寬直通國際網絡中心-James Bond風格。

使用批處理 一次配置14封電子郵件,然后通過返回而不是立即處理的方式收集每個CURL郵件-請參閱returnCurlHandle選項。

因此,將有14個並發的CURL會話,並且所有批處理將花費大約2-4秒的時間。

我還沒有對此進行測試,但是我將把電子郵件數組分成5個大塊,然后將每個大塊同時通過HTTP-POST例程傳遞。 原則上,應該將發送速率降低5倍。

根據我以前的經驗,我發現重用cURL句柄可以顯着減少開銷。 只需只執行一次curl_init(),並僅設置每次更改的選項。

您可以做的另一件事是使用mutli curl,它允許curl處理使其成為多線程。

http://php.net/manual/zh/function.curl-multi-init.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM