1

Buzz Browserインスタンスで通話のリクエスト オプションを変更するにはどうすればよいですか?

通話のタイムアウトを長くしたいと思います。現在、レガシーサーバーがx秒より長くかかると、トリガーされて例外が発生します。従来のサーバーは常に結果を返すため、このタイムアウトを延長したいと考えていますが、場合によっては最大 40 秒かかることもあります。

私はSymfony2コントローラー内で使用しています。これが私のコードです:

try {
    $buzz = new Browser();
    $legacyUrl = self::URL_LEGACY_SERVER . $urlSuffix .'?'. http_build_query($request->query->all());
    $legacyResponse = $buzz->get($legacyUrl, array());
} catch (\Exception $e) {
    return $this->sendError('Request to legacy server failed.', 500);
}
4

1 に答える 1

9

ソース コードの読み方を学びます。その GitHub ページで「タイムアウト」を検索します。

プロパティとメソッドAbstractClientがあることが表示されます。timeoutsetTimeout()

abstract class AbstractClient implements ClientInterface {
    // [...]
    protected $timeout = 5;
    // [...]
    public function setTimeout($timeout) {
        $this->timeout = $timeout;
    }
    // [...]
}

ここで、「どうすればそのオブジェクトに到達できるか?」と考えているはずです。クラスを使用しているのでBrowser、そこから始めるべきです。

Browserのコンストラクターを見ると、プロパティが を実装するクラスに設定されていることがわかりclientますClientInterface

public function __construct(ClientInterface $client = null, FactoryInterface $factory = null) {
    $this->client = $client ?: new FileGetContents();
    $this->factory = $factory ?: new Factory();
}

コンストラクターに引数を渡さないため、クライアントを のインスタンスに設定しFileGetContents、これは を拡張AbstractStreamし、次に拡張AbstractClientします (ファイルを調べて自分で確認してください)。

のコンストラクターで設定されたclientプロパティはBrowserプライベートに設定されているため、それにアクセスする方法を見つける必要があります。クラスを調べると、次のことがわかります

public function getClient() { /* ... */ }

わかった。を呼び出すことでクライアントを取得できることがわかりましたgetClient()setTimeout()また、クライアントには次のメソッドがあることもわかっています。

$buzz->getClient()->setTimeout(40);

ほら。

于 2014-09-26T14:17:35.047 に答える