За последние 24 часа нас посетили 22375 программистов и 1149 роботов. Сейчас ищут 633 программиста ...

Побороть тугое API

Тема в разделе "PHP для профи", создана пользователем Deonis, 3 июл 2017.

Метки:
  1. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Приветствую, господа! Суть в следующем - есть API практически безальтернативное, т.к. это API банка, с которым работают клиенты. Все необходимые запросы ведутся по крону. Всё бы хорошо, но иногда оно настолько тупит, что выходим по таймауту. Очень важно, чтобы запросы выполнялись строго по расписанию, плюс-минус пара минут. Если запускаю в ручном режиме и получаю таймаут, и сразу же отправляю этот же запрос, то в подавляющем большинстве случаев запрос проходит нормально. Была бы проблема со своими скриптами, так тут бы выход нашёл, но как научить крон перезапускать задачу, если происходит такая ситуация?

    P.S. На вопрос, мол что это за банк, который не может наладить нормальную работу API? Так ответ простой - я сам ох*евший.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    выставляй тайм аут запроса на 3 секунды например, если запрос не удачный, то инициализируй его повторно
     
    Deonis нравится это.
  3. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    тикет заведите. Не думайте что в банках работают менее ленивые разработчики :).
    В любом случае ответ лучше у сапорта получить как в такой ситуации действовать. Таймаут то всегда можно выставить.
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Спасибо. Даже не знал, что задания крон можно с таймаутом запускать (может кому в будущем пригодится). Обязательно опробую.
     
  5. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    Эту возможность обеспечивает не крон, а команда /bin/timeout, которая по существу не имеет никакого отношения к крону.
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @t1grok, спасибо, Кэп
     
  7. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Возникает резонный вопрос нахрена. Не проще в скрипте проверять ответ, ставить слип и долбить снова ?
     
  8. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Не проще и вообще не катит. Идёт запрос к апи и пока этот сценарий не отработает, дальше не сдвинемся. А если ответа так и не дождёмся, то таймаут и ни о каком слипе уже речи быть не может.

    К тому же там "система нипель":
    1. Базовая авторизация (она же открывает сессию)
    2. Авторизация в бизнесс-аккаунт
    3. Получение необходимых данных
    4. Теперь отрабатывает мой код
    5. Запрос на закрытие сессии

    Получается, как минимум, четыре запроса к API
     
    #8 Deonis, 4 июл 2017
    Последнее редактирование: 4 июл 2017
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    может сессию кэшировать? на неё по таймауту тоже вылетает?
     
    Deonis нравится это.
  10. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Как вариант... Сейчас пробую разные варианты.