我是如何徹底解決嵌入式HTTP客戶端痛點的?

前言

你還在自己寫HTTP協議嗎?
你還在找好用的HTTP客戶端嗎?
你還在用難用移植的HTTP客戶端嗎?
你還在苦逼的移植安全加密庫嗎?
你還在用難用的API接口嗎?

你還 …

高性能、跨平臺的HTTP客戶端發佈

今天,它它它它它它來了,解決所有的痛點,一個高性能,跨平臺的HTTP客戶端,今天發佈了,擁有極簡的API接口,你知道吧,僅需要1行代碼就能請求一個URL資源,一個對開發者及其友好的接口,用起來就是舒服,跨平臺移植輕而易舉。

github地址:https://github.com/jiejieTop/http-client

你可以很輕易讓他跑在Linux、FreeRTOS、RT-Thread、TencentOS tiny等操作系統平臺上,很輕鬆通過它去下載文件、請求HTTP服務器的數據,甚至是安全管理的加密協議你也不需要考慮,因爲這個HTTP客戶端會自動選擇數據通道,無論是TCP還是TLS加密傳輸。

看到這裏,你還感興趣的話,請往下看。。。

http-client整體架構

http-client架構

介紹一下整個架構的思想:

  • 最上方是對外的API接口,實現了基本的HTTP操作,如GET/POST等。

  • 接着就是client管理器,通過池化技術實現了client pool,在使用的時候從池中取出client,用完就放回,用戶基本不需要直接接觸client實例,實現了基本的HTTP方法,如GET/POST等,還實現了url解析器,解析用戶傳入的url,生成合適的參數遞交給攔截器。

  • 實現工作隊列,進行異步處理,在CPU支持多核的情況下,根據CPU的最大支持線程數量創建多個線程處理,將所有來自上層的請求按順序放入工作隊列,並行處理。

  • intercept是攔截器,比如實現HTTP請求HTTP應答等,它需要依賴HTTP報文的處理。攔截器的主要的處理工作是通過上層傳入的參數去設置網絡信息(host、port等),與服務器建立連接、重連,發起HTTP請求、解析來自服務器的響應報文,自動處理重定向、身份驗證及其他操作,而保證這些操作能完成的需要基礎組件,通用的字符串處理、事件的回調處理、HTTP的通用信息等,最下方的read and write則是與network打交道的。

  • network是網絡組件,它可以自動選擇數據通道,如果是加密方式則通過tls進行數據傳輸,而tls可以選擇mbedtls作爲加密後端也可以選擇openssl作爲加密後端;也可以是tcp直連方式,最終都是通過tcp傳輸的,此外還實現了本地的routing(或者叫dns緩存,加快域名的解析處理)。

  • platform是平臺抽象層,封裝了不同系統的東西,比如socke或者AT線程時間互斥鎖內存管理,這些是與系統打交道的,也是跨平臺必要的封裝。

  • 最右邊的則是通用的處理,list列表的處理、日誌庫錯誤代碼軟件隨機數發生器等。

優勢

如果你問我優勢,那就是高性能、跨平臺、極簡的API接口與穩定性

  1. 首先,高性能是因爲使用了Node.js的底層解析庫,衆所周知Node.js是一個非常高性能的服務端JavaScript環境,而它的底層解析HTTP協議是用的C語言實現的超高性能的解析庫,在目前看來應該是舉世無雙了。

  2. 跨平臺是因爲我自己實現了平臺的抽象層,可以跑在不同的系統之中,它不像wget、curl一樣,僅限於Linux平臺。

  3. 極簡的API接口,如果你要GET一個文件或者請求一個URL資源,1行代碼就夠了,至於爲什麼,請看我上面介紹的架構實現,用池化技術實現管理所有的client池,非常簡潔,舉個例子:

    • GET操作(ps:_http_cb是返回的數據內容的回調函數,直接讀取數據就行了,你啥都不用管)

      http_client_get("http://www.jiedev.com", _http_cb);
      
    • POST操作(直接指定URL,POST的數據內容,_http_cb是返回的數據內容,當然也可以爲NULL)

      http_client_post("http://httpbin.org/post", "this is a post test ...", _http_cb);
      
  4. 穩定性,目前曾多次測試,都是很穩定的,數據不會丟失,獲取109M的文件內容,重定向測試、都是非常好的,具體可以看後續的例子。

文檔&說明

當然啦,作爲一個開源軟件,文檔的介紹是必不可少的,我寫了很多的文檔介紹,所有的功能實現都有詳細的文檔介紹,每個組件有什麼功能都列舉出來了,你可以看到它是怎麼實現的,如果你想學習源碼的話,通過這些文檔,你可以非常快速瞭解整個架構的實現。

文檔

開發的歷程

在github是可以看到我是寫了功能的需求的,因爲當時我是想着讓大家參與進來的,所以寫了開發計劃的文檔,並且不斷完善它,很慶幸基本上所有的功能都已經實現了,當然後續還好持續添加新的功能,並且不斷維護這個項目,所有的功能實現如下:

http-doc001

http-doc002

http-doc003

一些測試的例子效果

這些是GIF動態圖,可以欣賞一下性能~

解析URL(超快的,性能槓槓的)

url_parsing

GET請求數據

get

POST數據到服務器

post

自動重定向處理

redirect

下載109M的文件,速度槓槓的

http

項目開源地址:

https://github.com/jiejieTop/http-client

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章