#c #http #post #curl #blocking
#c #http #Публикация #curl #блокировка
Вопрос:
Я вижу большинство http-кодов в php.
Я собираюсь написать несколько http-вызовов на c , используя CURL.
Интересно, является ли http изначально блокирующим (в отличие от неблокирующего).
То есть, когда вы отправляете сообщение get / post, ваш поток блокируется до тех пор, пока не получит ответ?
Если это не так, есть ли способ выполнить неблокирующий http get или post с помощью CURL?
Спасибо
Ответ №1:
HTTP — это протокол, поэтому он по своей сути не является блокирующим или неблокирующим. Единственное, что напоминает «поведение блокировки» в HTTP, это то, что вы не можете отправить два запроса или два ответа одновременно в одном конвейере — вы должны дождаться завершения запроса перед отправкой другого.
Итак, ваш реальный вопрос о блокировке операций должен касаться CURL — разрешает ли он неблокирующий ввод-вывод?
Ответ заключается в том, что в libcurl есть нечто, называемое «мультиинтерфейсом», что позволяет вам использовать его без блокировки: http://curl.haxx.se/libcurl/c/libcurl-multi.html
Если вы предпочитаете библиотеку, которая лучше ориентирована на асинхронный ввод-вывод, вы можете проверить Boost.ASIO. Я никогда не использовал его сам, но, похоже, он популярен:http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio.html
Комментарии:
1. @Daniel: Вовсе нет. CURL был разработан для использования в основном для синхронного доступа. Я не думаю, что асинхронные функции даже существовали в его более ранних версиях. Это не значит, что CURL дерьмовый, но очевидно, что Boost. ASIO был разработан для асинхронного ввода-вывода (даже название говорит об этом), в то время как CURL не был.