【发布时间】:2011-08-15 10:01:38
【问题描述】:
我在 php 中看到了大多数 http 代码。
我即将使用 CURL 在 c++ 中编写一些 http 调用。
想知道 http 是否本质上是阻塞的(与非阻塞相反)。
IE,当你发送get/post消息时,你的线程被阻塞直到它得到响应?
如果不是,有没有办法使用 CURL 执行非阻塞 http get 或 post?
谢谢
【问题讨论】:
标签: c++ http post curl blocking
我在 php 中看到了大多数 http 代码。
我即将使用 CURL 在 c++ 中编写一些 http 调用。
想知道 http 是否本质上是阻塞的(与非阻塞相反)。
IE,当你发送get/post消息时,你的线程被阻塞直到它得到响应?
如果不是,有没有办法使用 CURL 执行非阻塞 http get 或 post?
谢谢
【问题讨论】:
标签: c++ http post curl blocking
HTTP 是一种协议,因此它本身并不是阻塞或非阻塞的。唯一类似于 HTTP 中的“阻塞行为”的是,您不能在同一管道中同时发送两个请求或两个响应 - 您必须等待请求完成才能发送另一个请求。
所以你关于阻塞操作的真正问题应该是关于 CURL - 它是否允许非阻塞 IO?
答案是 libcurl 有一个叫做“多接口”的东西,它可以让你在不阻塞的情况下使用它: http://curl.haxx.se/libcurl/c/libcurl-multi.html
如果您更喜欢针对异步 IO 设计的更好的库,您可以查看 Boost.ASIO。我自己从未使用过它,但它似乎很受欢迎: http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio.html
【讨论】: