【问题标题】:Asynchronous http client library and glib event loop异步 http 客户端库和 glib 事件循环
【发布时间】:2011-08-04 09:25:23
【问题描述】:

我正在寻找一个具有某些特定需求的异步 http 客户端库:

  • 一定有可能将其作为 glibmm 源实现
  • 必须是单一威胁的
  • 它必须具有 lgpl、bsd、mit 或类似许可证

为了将它作为 glibmm 源实现,必须能够访问它的文件描述符,创建一个 Glib::PollFD 对象,我应该很高兴。

我一直在看几个库,它们都有一些问题:

  • libcurl,几乎可以做我想做的事,在多源 API 中它有一个 curl_multi_fdset 函数,它返回 fd_set。问题是我不知道如何将 fd_set 转换为一个或多个 Glib::PollFD
  • Poco 有一个在 istream 中返回的 HttpSessionClient,但我无法找到解除阻塞读取的方法。
  • Boost::Asio 需要使用 io_service 作为事件循环。

谁能克服我在这些树形库中看到的问题,或建议替代库?

【问题讨论】:

  • 我会编写自己的库。
  • 我最终将代码移植到了 boost::asio 和 cpp-netlib

标签: c++ c


【解决方案1】:

Glib::PollFD::PollFD(int fd) 是你想要的构造函数。 fd_set 只是一组整数 fd。 “集合”一词是在数学意义上使用的,即 fd 在集合中不能出现多次,因此他们不将其称为数组或列表。 fd_set 只是一个固定大小的缓冲区。通过创建一个 fd_set 并向其中添加一些 fd 来尝试一下,然后在调试器中查看它或将其转储为十六进制。

这是异步编程中的常见模式,您需要加入两个异步事件循环。虽然您可以轮询两个具有超时的循环,但通常最好从一个事件循环中获取原始 fd,然后添加它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多