Тайм-аут операции GCM curl

У меня есть пара файлов php, отвечающих за операции GCM, хранящиеся на моем сервере, они, кажется, работают нормально, когда хотят, но часто возвращают ошибку, которая гласит:

Ошибка Curl: время ожидания операции истекло через 0 миллисекунд при получении 0 из 0 байтов

Это проблема с сервером или проблема с моим кодом GCM? Ниже мой файл php:

<?php

$message = urldecode($_POST['message']);
$order = urldecode($_POST['order']);
$registrationIDs = urldecode($_POST['registrationIDs']);
$apiKey = "API_KEY";
$tableID = urldecode($_POST['tableID']);

$url = 'https://android.googleapis.com/gcm/send';

$fields = array(
    'registration_ids' => array($registrationIDs),
    'data' => array(
        'message' => $message,
        'tableID' => $tableID,
        'order' => $order
    ),
);

$headers = array(
    'Authorization: key=' . $apiKey,
    'Content-Type: application/json'
);

// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));



// Execute post
$result = curl_exec($ch);
if(curl_errno($ch)) {
    echo 'Curl error: ' . curl_error($ch);
}

// Close connection
curl_close($ch);

echo $result;

?>

person spongyboss    schedule 19.07.2015    source источник
comment
Я рекомендую вам пересмотреть структуру вашего сообщения, потому что это может быть вашей проблемой. Я делаю то же соединение CURL, что и вы, и у меня нет проблем.   -  person eloibm    schedule 21.07.2015


Ответы (1)


Я попытался отправить Push-уведомление, используя ваш код, и у меня это получилось.

Для тестов рекомендую установить параметр "dry_run". Вы будете отправлять сообщения в GCM, и он вернет их вам как «фальшивый» ответ.

Теперь ваша проблема, я искал, что может произойти, потому что кажется, что у вас есть ограничение на завиток или что-то в этом роде, но я не эксперт в этой теме, поэтому вот несколько советов, которые вы можете попробовать:

  • Если вы запускаете скрипт через браузер, установите set_time_limit равным нулю в течение бесконечных секунд.

    set_time_limit(0);

  • Увеличьте ограничение времени работы завитка, используя эту опцию «CURLOPT_TIMEOUT».

    curl_setopt($ch, CURLOPT_TIMEOUT, 20); // 20 секунд

  • Также может случиться при бесконечном перенаправлении с сервера. Чтобы остановить это, попробуйте запустить скрипт с отключенным отслеживанием местоположения.

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

person eloibm    schedule 21.07.2015
comment
Я попробую это, спасибо. Я также не эксперт в Curl и понятия не имею, что происходит, я просто следую инструкциям - person spongyboss; 22.07.2015
comment
Привет еще раз, спасибо за это, я попробовал, и это работает намного лучше! :) - person spongyboss; 28.07.2015