首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步发送多个goutte请求

异步发送多个goutte请求
EN

Stack Overflow用户
提问于 2015-04-05 06:59:28
回答 1查看 2.8K关注 0票数 1

这是我正在使用的代码

代码语言:javascript
复制
require_once 'goutte.phar';
use Goutte\Client;
$client = new Client();
for($i=0;$i<10;$i++){
     $crawler = $client->request('GET', 'http://website.com');
     echo '<p>'.$crawler->filterXpath('//meta[@property="og:description"]')->attr('content').'</p>';
     echo '<p>'.$crawler->filter('title')->text().'</p>';
}

这是可行的,但需要很长时间来处理?有什么办法能让它更快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-05 15:28:48

首先,您的代码示例没有异步特性。这意味着您的应用程序将依次执行get请求,等待响应,解析响应,然后循环返回。

虽然Goutte在内部使用Guzzles,但它不使用Guzzles异步功能。

要使代码真正异步,您需要参考有关以下内容的口碑文档:

  • 在池中发送请求
  • 异步响应处理

上面的代码示例会产生如下结果:

代码语言:javascript
复制
require 'vendor/autoload.php' //assuming composer package management.

$client = new GuzzleHttp\Client();

$requests = [
    $client->createRequest('GET', $url1),
    $client->createRequest('GET', $url2),
    $client->createRequest('GET', $url3),
    $client->createRequest('GET', $url4),
    $client->createRequest('GET', $url5),
    $client->createRequest('GET', $url6),
    $client->createRequest('GET', $url7),
    $client->createRequest('GET', $url8),
    $client->createRequest('GET', $url9),
    $client->createRequest('GET', $url10),  
];

$options = [
    'complete' => [
        [
            'fn' => function (CompleteEvent $event) {
                $crawler = new Symfony\Component\DomCrawler\Crawler(null, $event->getRequest()->getUrl());
                $crawler->addContent($event->getResponse->getBody(), $event->getResponse()->getHeader('Content-Type'));
                echo '<p>'.$crawler->filterXpath('//meta[@property="og:description"]')->attr('content').'</p>';
                echo '<p>'.$crawler->filter('title')->text().'</p>';
            },
            'priority' => 0,    // Optional
            'once'     => false // Optional
        ]
    ]
];

$pool = new GuzzleHttp\Pool($client, $requests, $options);

$pool->wait();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29454946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档