簡體   English   中英

異步 http 客戶端庫和 glib 事件循環

[英]Asynchronous http client library and glib event loop

我正在尋找具有某些特定需求的異步 http 客戶端庫:

  • 必須有可能將其實現為 glibmm 源
  • 它必須是單一威脅的
  • 它必須具有 lgpl、bsd、mit 或類似許可證

為了將它作為一個 glibmm 源來實現,必須能夠訪問它的文件描述符,創建一個 Glib::PollFD object,我應該對 go 很好。

我一直在查看幾個庫,它們都有一些問題:

  • libcurl,幾乎可以做我想做的事,在多源 API 中它有一個 curl_multi_fdset function,它返回 fd_set。 問題是我不知道如何將 fd_set 轉換為一個或多個 Glib::PollFD
  • Poco,有一個在 istream 中返回的 HttpSessionClient,我找不到一種方法來解除阻塞讀取。
  • Boost::Asio 需要使用 io_service 作為事件循環。

任何人都可以克服我在這些樹庫中看到的問題,或者建議替代庫嗎?

Glib::PollFD::PollFD(int fd) 是您想要的構造函數。 一個 fd_set 只是一組 integer fds。 “集合”這個詞是在數學意義上使用的,即 fd 在集合中不能出現多次,因此他們不將其稱為數組或列表。 fd_set 只是一個固定大小的緩沖區。 通過創建一個 fd_set 並向其中添加一些 fd 來嘗試一下,然后在調試器中查看它,或者只是將其轉儲為十六進制。

這是異步編程中的常見模式,您需要加入兩個異步事件循環。 雖然您可以輪詢兩個帶有超時的循環,但通常最好將原始 fds 從一個事件循環中取出,然后添加它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM