用php快速发送大量API请求?

用php快速发送大量API请求?,php,curl,curl-multi,Php,Curl,Curl Multi,我希望尽快进行一系列RESTAPI调用。我目前有大约1000个请求要提出 这些调用的结果对于任何处理或类似的事情都是不需要的。我只需要将它们全部发布到api url 我当然试过了,我的循环很慢。我也尝试过使用curl\u multi\u exec,但速度也一样慢。这是代码 foreach($users as $user){ $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT,

我希望尽快进行一系列RESTAPI调用。我目前有大约1000个请求要提出

这些调用的结果对于任何处理或类似的事情都是不需要的。我只需要将它们全部发布到api url

我当然试过了,我的循环很慢。我也尝试过使用curl\u multi\u exec,但速度也一样慢。这是代码

foreach($users as $user){
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_USERAGENT, 'Mandrill-PHP/1.0.36');
                curl_setopt($ch, CURLOPT_POST, true);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ch, CURLOPT_HEADER, false);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
                curl_setopt($ch, CURLOPT_TIMEOUT, 600);
                curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send.json');
                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
                curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($mandril_message));

                curl_multi_add_handle($mh,$ch);
}
        $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);
            }
        }

有没有关于如何快速完成这项任务的想法。如果没有curl代码,我的其余代码只需要一秒钟左右就可以完成。

一千个rest请求将很慢。这里的技巧是异步运行作业,这样用户就不会受到影响。您可以向相关的PHP脚本发送AJAX请求,并增强PHP脚本以在某处写入进度数据($\会话、平面文件、数据库等)。然后,您可以发送单独的AJAX调用以获取作业的进度,并在作业运行时向用户显示更新


这都是假设这是我们在这里讨论的一个网页,而不是一个shell脚本。

好的,所以我终于找到了一些时间来使用mandril api使其正常工作。我从大约2000个api请求变成了1个api请求。处理时间从10分钟增加到6.8秒

因此,基本上您只需要确保使用了这些合并变量,并为每组合并变量指定一个收件人

下面是一个如何做到这一点的示例

"to": [
        {
            "email": "recipient1.email@example.com"
        },
        {
            "email": "recipient2.email@example.com"
        }
    ],
"merge_vars": [
        {
            "rcpt": "recipient1.email@example.com",
            "vars": [
                {
                    "name": "FNAME",
                    "content": "John"
                },
                {
                    "name": "FEED",
                    "content": "Your personalized feed content here"
                }
            ],
            "rcpt": "recipient2.email@example.com",
            "vars": [
                {
                    "name": "FNAME",
                    "content": "Jane"
                },
                {
                    "name": "FEED",
                    "content": "Your personalized feed content here"
                }
            ]
        }
    ]

api是否允许批处理,例如作为单个请求发送
1,2,3,4,
,而不是单个请求
1
,然后
2
,然后
3
,等等?我目前正在研究这个问题。到目前为止,我还没有发现任何类似的东西。他们将允许您向多人发送相同的电子邮件,但在这种情况下,每封电子邮件对每个用户都是唯一的。顺便说一句,我正在与mandril的api合作。我已经给mandril(api提供商)发了电子邮件,看看他们对通过一个事务向他们发送大量电子邮件的看法。这是一个命令行脚本。我真的不需要知道它什么时候完成,因为我可以通过api仪表板判断它是否正确发送。懒惰的做法是将php的最大执行时间设置为无穷大,让它搅动,但这不能很好地扩展。如果不同的用户有不同的电子邮件内容,该怎么办?我的意思是我必须把他们的名字写在电子邮件内容的顶部(例如,“你好,xyz……”)。。而不是怎么做?呃,除非我读错了,否则你只发送了recipient2的合并变量。。。请你澄清一下好吗?