На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
      Здравствуйте,

      Я допускаю, что я полный тугодум, но я ни черта не могу понять, как работает параметр CURLMOPT_TIMERFUNCTION в либкурле: https://curl.se/libcurl/c/CURLMOPT_TIMERFUNCTION.html




      ExpandedWrap disabled
        timer_callback(CURLM *multi, long timeout_ms, void *userp)
        {
        //какой то код
        }
         
        curl_multi_setopt(curl_multi_handle, CURLMOPT_TIMERFUNCTION,  timer_callback);



      Цитата
      Некоторые функции, такие как таймауты и повторные попытки, требуют вызова libcurl, даже если дескрипторы файлов не выполняются.


      Нафига ??

      Цитата
      Значение timeout_ms, равное -1, переданное этому обратному вызову, означает, что вы должны удалить таймер. Все остальные значения являются допустимыми сроками действия в миллисекундах.

      Переданное кем ?? Я что должен этот кол-бэк еще вызывать ?? Зачем и откуда ???


      Цитата
      Ваша функция обратного вызова timer_callback должна установить неповторяющийся таймер со временем истечения timeout_ms миллисекунд. Когда сработает этот таймер, вызовите либо curl_multi_socket_action, либо curl_multi_perform , в зависимости от того, какой интерфейс вы используете.

      Зачем мне вызывать curl_multi_socket_action() из кол-бэка таймера, если мне нужно его вызвать из той части когда, где сработало событие на сокете от ОС - оповещающее меня, что сокет готов или к записи или к чтению и в этот момент я бы и вызвал curl_multi_socket_action(). На какой черт нужны какие то таймеры или откуда их вызывать то ???
      И зачем тогда вообще вызывать таймер, если можно сразу вызвать curl_multi_socket_action()??


      Цитата

      Ваша функция обратного вызова timer_callback должна установить неповторяющийся таймер...

      Что значит не повторяющийся ? А если он повторится ?



      Или я полный идиот или документация либкурл так "хорошо" написана, специально, чтобы поменьше народу им использовалось.
      Я просто реально физически не могу представить в каком месте кода при осуществлении к примеру GET запроса - этот чёртов таймер должен быть, как то вызван и зачем.
      Сообщение отредактировано: Optimus1 -
        Нда.
        Я почему то всегда отрицательно относился к библиотекам функций-оберток. ВСЁ абсолютно можно и нужно писать на старом добром интерфейсе сокетов...то ли Беркли, то ли Виндовс :(
        Сообщение отредактировано: Oleg2004 -
          Цитата Oleg2004 @
          ВСЁ абсолютно можно и нужно писать на старом добром интерфейсе сокетов...то ли Беркли, то ли Виндовс :(

          Хорошая мысль. Но это не совсем оптимальный вариант.
          Если не нравится чужая обёртка, тогда пишем свою.
          Иначе получим совсем уж низкую производительность труда
          и постоянную необходимость держать в памяти все тонкости.
            Цитата ЫукпШ @
            Хорошая мысль. Но это не совсем оптимальный вариант.

            Вы неправы.
            Использование интерфейса сокетов в смысле понимаемости процессов...их сути
            Это непревосходимо.
            Обертки пишутся только для скорости программирования...ПРОГРАММИРОВАНИЯ, Карл.
            Но не для быстродействия.
            Это нонсенс...
            Тот кто писал свою обертку никак не мог предвосхитить ВСЕ варианты программерского мышления...
            Курлы всякие, бустасио и прочая...не. Никто не может заменить женщину что бы родить дите...
              Цитата Oleg2004 @
              Тот кто писал свою обертку никак не мог предвосхитить ВСЕ варианты программерского мышления...

              Вот и я об этом.
              Воплотите свой вариант программёрского мышления
              в собственноручно написанном объекте.
              Мы, собственно, и занимаемся программированием.
              А не вожделением "вариантов мышления" для наслаждения вообще.
              Производительность труда важнее.
              Ценный и невосполнимый ресурс - время - требуется
              использовать крайне бережно.
                Цитата Oleg2004 @
                Я почему то всегда отрицательно относился к библиотекам функций-оберток. ВСЁ абсолютно можно и нужно писать на старом добром интерфейсе сокетов...то ли Беркли, то ли Виндовс


                Я так и сделал сначала, сделал простенький Http 1.1 клиент на портах завершения Windows - и он работал и даже c редиректом.
                А потом надо было реализовывать куки, потом сжатие, потом transfer_encoding и чанки, потом SSL/TLS - рукопожатие, проверку сертификатов и это только HTTP 1.1, а уж сто лет в обед, как есть куда более сложный HTTP 2 и уже вроде бы утвержден HTTP 3.

                Извините, но Вы сами то пробывали все делать с нуля, когда вот уже завтра, после завтра - нужно решить конкретную практическу задачу ?

                Добавлено
                Кстати, теже сокеты Беркли - это всего лишь обертка над TCP/IP, а порты завершения IO или epoll - это частично обертка над DMA процессора, так что ... :)
                Сообщение отредактировано: Optimus1 -
                  Цитата Optimus1 @
                  а порты завершения IO или epoll - это частично обертка над DMA процессора

                  :wacko:
                    Цитата ЫукпШ @
                    А не вожделением "вариантов мышления" для наслаждения вообще.

                    Совсем не понял про вожделение и наслаждение... :wacko: Это вы про чито?

                    Добавлено
                    Цитата Optimus1 @
                    теже сокеты Беркли - это всего лишь обертка над TCP/IP,

                    Ну Вы даете....стране угля... :) :(

                    Добавлено
                    Цитата Optimus1 @
                    Извините, но Вы сами то пробывали все делать с нуля, когда вот уже завтра, после завтра - нужно решить конкретную практическу задачу ?

                    Да Вы что??? Серьезную задачу за день?????
                    Не приходилось. А вот один проект для американской фирмы IBM приходилось делать...с нуля...Но проект был на год...
                    Ну а с libcurl я никогда не встречался, так уж судьба решила.
                    Так что от меня в этом смысле пользы никакой...но пост в сетевой тематике и может кто из сетевых проггеров увидит его и даст совет.
                    Я же как модератор за порядком в разделе слежу :)
                    Сообщение отредактировано: Oleg2004 -
                      Цитата Oleg2004 @

                      Я почему то всегда отрицательно относился к библиотекам функций-оберток. ВСЁ абсолютно можно и нужно писать на старом добром интерфейсе сокетов...то ли Беркли, то ли Виндовс


                      Однако теже сокеты Беркли - это всего лишь обертка над TCP/IP, но Вы же, как модератор напрямую с TCP/IP - не работаете, и получается противоречие - Вы почему то всегда отрицательно относился функциям-оберток отрицательно, но сами - их используете :)

                      Цитата Oleg2004 @

                      Ну Вы даете....стране угля... :) :(


                      Цитата Oleg2004 @

                      Да Вы что??? Серьезную задачу за день?????

                      Извините Вы с какой целью интересуетесь ? Что серьезную задачу ?????
                        Цитата Optimus1 @
                        но Вы сами то пробывали все делать с нуля, когда вот уже завтра, после завтра - нужно решить конкретную практическу задачу ?

                        Это ваш пост?
                        Тогда к чему такие вопросы?
                        Цитата Optimus1 @
                        Извините Вы с какой целью интересуетесь ? Что серьезную задачу ?????


                        Цитата Optimus1 @
                        сокеты Беркли - это всего лишь обертка над TCP/IP

                        Где обертка - а где стек...Это совсем разные спектакли... :unsure:
                        Читайте простой пример что делает обертка:
                        Цитата
                        Приведу простой уже встречавшийся пример построения обертки. Для сортировки массива строился рекурсивный метод QSort(a, start, finish), имеющий три аргумента - сортируемый массив и два аргумента, задающие интервал сортировки. Исходно требуется сортировать массив, поэтому целесообразно построить нерекурсивную обертку рекурсивного метода:
                        def QuickSort(a): QSort(a, 0, len(a))
                        У обертки в данном случае проще интерфейс - один аргумент, а не три. Все, что делает обертка, - это вызов рекурсивной функции.
                        Конечно, когда требуется добавить функциональность, обертка может быть сложнее и не сводится к простому вызову декорируемой функции.

                        Ну и какие же функции описывают заголовки протоколов стека TCP/IP? Игде их параметры, которыми можно маскировать (декорировать, обертывать) заголовки протоколов???

                        Добавлено
                        Цитата ЫукпШ @
                        Производительность труда важнее.
                        Ценный и невосполнимый ресурс - время - требуется
                        использовать крайне бережно.

                        Цитата
                        RAD (от англ. rapid application development — быстрая разработка приложений) — концепция организации технологического процесса разработки программных продуктов, ориентированная на максимально быстрое получение результата в условиях сильных ограничений по срокам и бюджету и нечётко определённых требований к продукту. Эффект ускорения разработки достигается путём использования соответствующих технических средств и непрерывного, параллельного с ходом разработки, уточнения требований и оценки текущих результатов с привлечением заказчика. RAD создана в конце 1980-х как альтернатива более ранним каскадной и итеративной моделям. С конца XX века RAD получила широкое распространение

                        Да, я могу себе представить обертки и их корреляцию с RAD-ом.
                        Но и здесь я утверждаю - а я пользовался RAD в молодости :D что не радом единым строится программерский интеллект...
                        Сообщение отредактировано: Oleg2004 -
                          Цитата Oleg2004 @
                          Ну и какие же функции описывают заголовки протоколов стека TCP/IP? Игде их параметры, которыми можно маскировать (декорировать, обертывать) заголовки протоколов???


                          К примеру:
                          -socket()
                          -connect()
                          -send()
                          -close()

                          Ну или можете напрямую писать свой драйвер для сетевой карты и управлять TCP/IP напрямую или использовать обертку интерфейс Сокетов.
                          Сообщение отредактировано: Optimus1 -
                            Optimus1
                            Судя по вашему подходу, все современные языки программирования - HLL, что называется - вы считаете обертками над машинным кодом...ну в крайнем случае над ассемблерами.
                            Я был всегда большим поклонником ассембера для IBM 360/370 - родителя для ассемблера IBM PC Compatible.
                            Но только ассемблер и здесь есть просто способ доступа к протоколам TCP/IP, а не обертка над протоколами.
                            При вашем подходе все программирование и ваще все это обертка над естественным языком.
                            Глобально может быть и верно....да только в современном мире программирования обертками называется совсем другое. :)
                            M
                            Прекращаем флуд не по теме
                            Сообщение отредактировано: Oleg2004 -
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0438 ]   [ 16 queries used ]   [ Generated: 24.04.24, 22:09 GMT ]