【问题标题】:Php curl keep alive connectionphp curl保持连接
【发布时间】:2015-08-14 04:54:18
【问题描述】:

根据:https://help.nexmo.com/hc/en-us/articles/205065817-Can-I-send-multiple-SMS-in-a-single-API-request-

“确保保持连接处于活动状态,以便在发送请求时可以重用 HTTP 套接字并充分利用您的帐户吞吐量(5 SMS/秒)。最佳实践是利用 HTTP 1/1 和 Keep-激活连接,因此每次发送新请求时都无需打开另一个 HTTP 连接。”

我已经阅读了一些信息以尝试使用 curl 保持连接,但我无法重复使用 http 套接字发送 5 条短信。

解决办法是什么?

我试过了:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

没有成功。

我试图删除:

curl_close($ch);

也没有成功...

我无法找到一种保持连接状态的好方法,以便按照 nexmo 的要求发送短信。

谁知道该怎么做?

【问题讨论】:

  • 你试过设置curl_setopt($ch, CURLOPT_HTTPHEADER, array("Connection: keep-alive"));吗?
  • @user3584460 我还没试过。您是在其中一个代码中使用它还是只是一个建议?
  • 只是一个建议。如果我确定它在这种特殊情况下会起作用,我会发布一个答案。
  • 谢谢,我会在做一些测试之前等待更多建议。

标签: php curl throttling nexmo


【解决方案1】:

发送多条消息和使用keep-alive 是两件不同的事情。使用 Nexmo(如常见问题解答所述),每个 HTTP 请求只能发送一条 SMS。要发送多个 SMS,您只需发出多个 HTTP 请求。

默认情况下,Nexmo 将允许您的帐户每秒向 SMS API 发出 5 个请求。如果您想最大化您的吞吐量,您需要确保尽可能快地发出请求(或者实际上,至少在 5/秒的速率限制下尽可能快)。

这就是keep-alive 发挥作用的地方,确保您尽可能快地发送请求。 curl_setop 文档引用了 CURLOPT_FORBID_REUSE,它允许:

TRUE 以强制连接在完成处理后显式关闭,并且不会被池化以供重用。

所以默认情况下,curl 会尝试使用keep-alive,假设您重用了 curl 句柄。有关详细信息,请参阅this question

quickstarts here 借用这段代码(披露,我是这些代码的作者):

<?php
$url = 'https://rest.nexmo.com/sms/json?' . http_build_query([
    'api_key' => API_KEY,
    'api_secret' => API_SECRET,
    'to' => YOUR_NUMBER,
    'from' => NEXMO_NUMBER,
    'text' => 'Hello from Nexmo'
]);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

如果你使用curl_setop() 设置一个新的CURLOPT_URL 和不同的数字/消息(它重用curl 句柄)curl 应该默认使用keep-alive

但请记住,这不会改变您使用 Nexmo 发送多条消息的方式,它只是一种优化发送速度的方法消息。

【讨论】:

  • 我将您的答案设置为好,但我以不同的方式解决了我的问题。事实上,当从法国号码向法国接收者发送短信时,是有限制的。为了解决这个问题,我现在从加拿大号码发送短信。我现在没有速度限制。
猜你喜欢
  • 2015-02-13
  • 1970-01-01
  • 2010-10-21
  • 2015-04-25
  • 1970-01-01
  • 2011-04-28
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多