2

我正在尝试设置 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>";
}
4

1 回答 1

2

您应该能够轻松地每秒向 HTTP API 提交超过 100 条消息。

创建 HTTPS 连接是一个非常缓慢的过程(与 HTTP 相比)。如果您想使用 HTTPS 获得更好的性能,则必须重用连接。

我猜 Utilities::getWebPage() 每次都在创建一个新的 HTTPS 连接?对于 PHP,我建议你看看使用 cURL。

如果你想更进一步(我怀疑你需要走这么远),你可以考虑使用 curl_multi... 虽然它需要更多的工作而且大多数人不需要这么快(有些人发现使用另一个更容易API 类似于 SMTP API,因此它们在 1 封电子邮件中包含许多消息)。

此外,从技术上讲,您不需要使用 HTTP API 上的批处理命令来发送消息(除非您愿意)。您只需 api.clickatell.com/http/sendmsg?.... 就可以发送数百万美元?在这种情况下,无需进行启动批处理调用。

使用 SMTP API 之类的东西,您可以在一封电子邮件中放入 100 000 条消息(如果您需要每条消息的唯一文本,您可以使用该 API 上的批处理工具)。

于 2015-05-29T08:12:57.800 回答