异步http客户端库和glib事件循环

Asynchronous http client library and glib event loop

本文关键字:glib 事件 循环 http 客户端 异步      更新时间:2023-10-16

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

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

为了将其实现为glibmm源,必须能够访问它的文件描述符,创建Glib::PollFD对象,这样就可以了。

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

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

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

Glib::PollFD::PollFD(int fd)是您想要的构造函数。fd_set就是一个整数fds的集合。"set"这个词是在数学意义上使用的,即在一个集合中没有fd可以出现一次以上,因此他们不把它称为数组或列表。fd_set只是一个固定大小的缓冲区。通过创建一个fd_set并添加一些fds来尝试它,然后在调试器中查看它,或者直接将其以十六进制格式转储。

这是异步编程中一个常见的模式,你需要连接两个异步事件循环。虽然可以使用超时轮询两个循环,但通常最好从一个事件循环中获取原始数据,并将它们添加到