【问题标题】:http post & get is blocking call?http post & get 阻塞呼叫?
【发布时间】:2011-08-15 10:01:38
【问题描述】:

我在 php 中看到了大多数 http 代码。

我即将使用 CURL 在 c++ 中编写一些 http 调用。
想知道 http 是否本质上是阻塞的(与非阻塞相反)。
IE,当你发送get/post消息时,你的线程被阻塞直到它得到响应?

如果不是,有没有办法使用 CURL 执行非阻塞 http get 或 post?

谢谢

【问题讨论】:

    标签: c++ http post curl blocking


    【解决方案1】:

    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

    【讨论】:

    • @Daniel:一点也不。 CURL 旨在主要用于同步访问。我认为异步功能甚至不存在于其早期版本中。这并不是说 CURL 很糟糕,但很明显 Boost.ASIO 是为异步 IO 设计的(连名字都这么说),而 CURL 不是。
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多