行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

Cinatra的設計非常簡單,只有幾個組件,下面是Cinatra的邏輯視圖。

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

cinatra簡介

cinatra是一個高性能易用的http框架,它是用modern c++(c++17)開發的,它的目標是提供一個快速開發的c++ http框架。它的主要特點如下:

統一而簡單的接口,header-only,跨平臺,高效,支持面向切面編程

cinatra目前支持了http1.1/1.0和websocket, 你可以用它輕易地開發一個http服務器,比如常見的數據庫訪問服務器、文件上傳下載服務器、實時消息推送服務器,你也可以基於cinatra開發一個mqtt服務器。

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

如何使用

編譯依賴

cinatra是基於boost.asio開發的,所以需要boost庫,同時也需要支持c++17的編譯器,依賴項:

1、boost.asio, boost1.66

2、c++17編譯器(gcc7.2,clang4.0, vs2017 update15.5)

如何使用

cinatra是header-only的,直接引用頭文件既可。

快速示例

示例1:一個簡單的hello world

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

5行代碼就可以實現一個簡單http服務器了,用戶不需要關注多少細節,直接寫業務邏輯就行了。

示例2:展示如何取header和query以及錯誤返回

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

示例3:面向切面的http服務器

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

本例中有兩個切面,一個校驗http請求的切面,一個是日誌切面,這個切面用戶可以根據需求任意增加。本例會先檢查http請求的合法性,如果不合法就會返回bad request,合法就會進入下一個切面,即日誌切面,日誌切面會打印出一個before表示進入業務邏輯之前的處理,業務邏輯完成之後會打印after表示業務邏輯結束之後的處理。

示例4:文件上傳

cinatra目前支持了multipart和octet-stream格式的上傳。

multipart文件上傳

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

短短几行代碼就可以實現一個http文件上傳的服務器了,包含了異常處理和錯誤處理。

octet-stream文件上傳

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

示例5:文件下載

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

示例6:websocket

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架

性能測試

測試用例:

ab測試:ab -c100 -n5000 127.0.0.1:8080/

服務器返回一個hello。

在一個8核心16G的雲主機上測試,qps在9000-13000之間。

對比測試

通過ab測試和boost.beast做對比,二者qps相當,大概是因為二者都是基於boost.asio開發的的原因。cinatra目前還沒做專門的性能優化,還有提升空間。

注意事項

文件上傳下載,websocket的業務函數是會多次進入的,因此寫業務邏輯的時候需要注意,推薦按照示例中的方式去做。

cinatra目前剛開始在生產環境中使用, 還處於完善階段,可能還有一些bug,因此不建議現階段直接用於生產環境,建議先在測試環境下試用。

roadmap

1、支持ssl

2、支持斷點續傳

3、支持session和cookie

4、接口優化、性能優化

我希望有越來越多的人使用並喜歡cinatra,也希望cinatra在使用過程中越來越完善,變成一個強大易用、快速開發的http框架,歡迎大家積極參與cinatra項目

行業大咖推薦!CINATRA:一個高效易用的C++, HTTP框架


分享到:


相關文章: