Clickatell 批处理模板速度慢(PHP,http)
Clickatell batch templates slow (PHP, http)
我正在尝试设置 clickatell 以发送批量短信'。我有它的工作,但它很慢。发送 5 条测试短信大约需要 20 秒,发送 10 条测试短信大约需要 30 秒。
$nums = array(
"44-227811116" => "1",
"44-227819885" => "2",
"44-227819314" => "3",
"44-227815413" => "4",
"44-227819326" => "5"
);
//login
$url="https://api.clickatell.com/http/auth?api_id=xxxxx&user=xxxxx&password=xxxxx";
$page=Utilities::getWebPage($url);
//session
$clicksessionparts=explode(":", $page);
$clicksession=trim($clicksessionparts[1]);
//batch
$from=xxxxx;
$batchTemplate = urlencode("Test message #field1#");
$url="https://api.clickatell.com/http_batch/startbatch?session_id=$clicksession&template=$batchTemplate&from=$from&deliv_ack=1";
$page=Utilities::getWebPage($url);
$batchId=explode(":",$page);
$batchId=trim($batchId[1]);
foreach ($nums as $k => $v)
{
$start = new DateTime();
print_r($start->format("H i:s"));
$url="https://api.clickatell.com/http_batch/senditem?session_id=$clicksession&batch_id=$batchId&to=xxxxx&field1=$v";
$page=Utilities::getWebPage($url);
echo "<pre>";
print_r($page);
echo "</pre>";
$end = new DateTime();
print_r($end->format("H i:s"));
echo "<br><br>";
}
您应该能够轻松地每秒向 HTTP API 提交超过 100 条消息。
创建 HTTPS 连接是一个非常缓慢的过程(与 HTTP 相比)。如果你想使用 HTTPS 获得更好的性能,你将不得不重用这些连接。
我猜 Utilities::getWebPage() 每次都在创建一个新的 HTTPS 连接?对于 PHP,我建议您使用 cURL。
如果你想更进一步(我怀疑你需要走这么远),你可以考虑使用 curl_multi...虽然它需要更多的工作,而且大多数人不需要那么快的速度(有些人发现使用另一个 API 更容易,比如 SMTP API 所以他们在一封电子邮件中有很多消息)。
此外,从技术上讲,您不需要使用 HTTP API 上的批处理命令来发送消息(除非您愿意)。您只需 api.clickatell.com/http/sendmsg?.... 就可以发送数百万美元。在这种情况下,无需进行开始批量调用。
使用 SMTP API 之类的东西,您可以在一封电子邮件中放入 100 000 封邮件(如果您需要每封邮件的文本都是唯一的,您可以在 API 上使用批处理工具)。
我正在尝试设置 clickatell 以发送批量短信'。我有它的工作,但它很慢。发送 5 条测试短信大约需要 20 秒,发送 10 条测试短信大约需要 30 秒。
$nums = array(
"44-227811116" => "1",
"44-227819885" => "2",
"44-227819314" => "3",
"44-227815413" => "4",
"44-227819326" => "5"
);
//login
$url="https://api.clickatell.com/http/auth?api_id=xxxxx&user=xxxxx&password=xxxxx";
$page=Utilities::getWebPage($url);
//session
$clicksessionparts=explode(":", $page);
$clicksession=trim($clicksessionparts[1]);
//batch
$from=xxxxx;
$batchTemplate = urlencode("Test message #field1#");
$url="https://api.clickatell.com/http_batch/startbatch?session_id=$clicksession&template=$batchTemplate&from=$from&deliv_ack=1";
$page=Utilities::getWebPage($url);
$batchId=explode(":",$page);
$batchId=trim($batchId[1]);
foreach ($nums as $k => $v)
{
$start = new DateTime();
print_r($start->format("H i:s"));
$url="https://api.clickatell.com/http_batch/senditem?session_id=$clicksession&batch_id=$batchId&to=xxxxx&field1=$v";
$page=Utilities::getWebPage($url);
echo "<pre>";
print_r($page);
echo "</pre>";
$end = new DateTime();
print_r($end->format("H i:s"));
echo "<br><br>";
}
您应该能够轻松地每秒向 HTTP API 提交超过 100 条消息。
创建 HTTPS 连接是一个非常缓慢的过程(与 HTTP 相比)。如果你想使用 HTTPS 获得更好的性能,你将不得不重用这些连接。
我猜 Utilities::getWebPage() 每次都在创建一个新的 HTTPS 连接?对于 PHP,我建议您使用 cURL。
如果你想更进一步(我怀疑你需要走这么远),你可以考虑使用 curl_multi...虽然它需要更多的工作,而且大多数人不需要那么快的速度(有些人发现使用另一个 API 更容易,比如 SMTP API 所以他们在一封电子邮件中有很多消息)。
此外,从技术上讲,您不需要使用 HTTP API 上的批处理命令来发送消息(除非您愿意)。您只需 api.clickatell.com/http/sendmsg?.... 就可以发送数百万美元。在这种情况下,无需进行开始批量调用。
使用 SMTP API 之类的东西,您可以在一封电子邮件中放入 100 000 封邮件(如果您需要每封邮件的文本都是唯一的,您可以在 API 上使用批处理工具)。