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

时间:2011-07-22 21:12:00

标签: c++ c

我正在寻找具有某些特定需求的异步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作为事件循环。

任何人都可以克服我在这些树库中看到的问题,或建议其他库吗?

1 个答案:

答案 0 :(得分:0)

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

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