پایان مهلت زمانی

همه سرویس‌های Google Ads API تنظیمات پیش‌فرضی دارند، ازجمله زمان‌های اتمام مهلت، که توسط انتقال استفاده می‌شوند. هر سرویس از نسخه Google Ads API داده‌شده، فایل JSON اختصاصی دارد که این تنظیمات پیش‌فرض در سطح سرویس و روش تعریف شده است. برای مثال، می‌توانید فایل‌های پیکربندی منبع سرویس را برای جدیدترین نسخه Google Ads API در GitHub پیدا کنید.

تنظیمات پیش‌فرض برای اکثر موارد استفاده کافی است، اما ممکن است مواقعی وجود داشته باشد که لازم باشد آن‌ها را لغو کنید. کتابخانه کارخواه برای PHP از لغو کردن تنظیمات مهلت زمانی هر تماس (که بااستفاده از گزینه timeoutMillis به میلی‌ثانیه مشخص می‌شود) برای جاری‌سازی سرور و تماس‌های تکی پشتیبانی می‌کند.

اگرچه می‌توانید مقادیر مهلت زمانی بالا (مثلاً ۲ ساعت یا بیشتر) را در کتابخانه کارخواه پیکربندی کنید، پراکسی‌های شبکه زیرین یا سرور API ممکن است درخواست‌های طولانی‌مدت را زودتر خاتمه دهند و خطای وضعیت DEADLINE_EXCEEDED را برگردانند.

ملغی کردن مهلت‌های زمانی برای تماس جاری‌سازی سرور

تنها روش سرویس Google Ads API که از فراخوانی جاری‌سازی سرور استفاده می‌کند GoogleAdsService.SearchStream است. برای ملغی کردن مهلت زمانی پیش‌فرض، هنگام فراخوانی روش، timeoutMillis (به میلی‌ثانیه) را در آرایه اختیاری گزینه‌های تماس عبور دهید:

    private static function makeServerStreamingCall(
        GoogleAdsClient $googleAdsClient,
        int $customerId
    ) {
        $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
        // Creates a query that retrieves all campaign IDs.
        $query = 'SELECT campaign.id FROM campaign';

        $output = '';
        try {
            // Issues a search stream request by setting a custom client timeout.
            /**
 * @var GoogleAdsServerStreamDecorator $stream
*/
            $stream = $googleAdsServiceClient->searchStream(
                SearchGoogleAdsStreamRequest::build($customerId, $query),
                [
                    // Any server streaming call has a default timeout setting. For this
                    // particular call, the default setting can be found in the following file:
                    // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V26/Services/resources/google_ads_service_client_config.json.
                    //
                    // When making a server streaming call, an optional argument is provided and can
                    // be used to override the default timeout setting with a given value.
                    'timeoutMillis' => self::CLIENT_TIMEOUT_MILLIS
                ]
            );
            // Iterates over all rows in all messages and collects the campaign IDs.
            foreach ($stream->iterateAllElements() as $googleAdsRow) {
                /**
 * @var GoogleAdsRow $googleAdsRow
*/
                $output .= ' ' . $googleAdsRow->getCampaign()->getId();
            }
            print 'The server streaming call completed before the timeout.' . PHP_EOL;
        } catch (ApiException $exception) {
            if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) {
                print 'The server streaming call did not complete before the timeout.' . PHP_EOL;
            } else {
                // Bubbles up if the exception is not about timeout.
                throw $exception;
            }
        } finally {
            print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL;
        }
    }
      

لغو کردن زمان‌های اتمام برای تماس یک‌نفره

اکثر روش‌های سرویس Google Ads API از فراخوانی‌های تک‌مقداری استفاده می‌کنند؛ نمونه‌های معمول عبارتند از GoogleAdsService.Search و GoogleAdsService.Mutate. برای لغو کردن زمان استراحت پیش‌فرض، timeoutMillis (به میلی‌ثانیه) را در آرایه اختیاری گزینه‌های تماس هنگام فراخوانی روش ارسال کنید:

    private static function makeUnaryCall(GoogleAdsClient $googleAdsClient, int $customerId)
    {
        $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
        // Creates a query that retrieves all campaign IDs.
        $query = 'SELECT campaign.id FROM campaign';

        $output = '';
        try {
            // Issues a search request by setting a custom client timeout.
            $response = $googleAdsServiceClient->search(
                SearchGoogleAdsRequest::build($customerId, $query),
                [
                    // Any unary call is retryable and has default retry settings.
                    // Complete information about these settings can be found here:
                    // https://googleapis.github.io/gax-php/master/Google/ApiCore/RetrySettings.html.
                    // For this particular call, the default retry settings can be found in the
                    // following file:
                    // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V26/Services/resources/google_ads_service_client_config.json.
                    //
                    // When making an unary call, an optional argument is provided and can be
                    // used to override the default retry settings with given values.
                    'retrySettings' => [
                        // Sets the maximum accumulative timeout of the call, it includes all tries.
                        'totalTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS,
                        // Sets the timeout that is used for the first try to one tenth of the
                        // maximum accumulative timeout of the call.
                        // Note: This overrides the default value and can lead to
                        // RequestError.RPC_DEADLINE_TOO_SHORT errors when too small. We recommend
                        // to do it only if necessary.
                        'initialRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 10,
                        // Sets the maximum timeout that can be used for any given try to one fifth
                        // of the maximum accumulative timeout of the call (two times greater than
                        // the timeout that is used for the first try).
                        'maxRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 5
                    ]
                ]
            );
            // Iterates over all rows in all messages and collects the campaign IDs.
            foreach ($response->iterateAllElements() as $googleAdsRow) {
                /**
 * @var GoogleAdsRow $googleAdsRow
*/
                $output .= ' ' . $googleAdsRow->getCampaign()->getId();
            }
            print 'The unary call completed before the timeout.' . PHP_EOL;
        } catch (ApiException $exception) {
            if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) {
                print 'The unary call did not complete before the timeout.' . PHP_EOL;
            } else {
                // Bubbles up if the exception is not about timeout.
                throw $exception;
            }
        } finally {
            print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL;
        }
    }