行业大咖推荐!CINATRA:一个高效易用的C++, HTTP框
Cinatra是由C++开源社区发起的一个开源项目,是一个现代C++写的Web框架,旨在给用户提供一个易用、灵活和高性能的Web框架,让用户能完全专注于核心逻辑而无需关注http细节。它的灵感来源于Sinatra,但又有自己的特色。目前正式发布第一个版本Cinatra0.9.0。开发者包括:江南、网事如风、SIGSEGV、海盗、福尔摩斯喵。
Cinatra的设计非常简单,只有几个组件,下面是Cinatra的逻辑视图。
cinatra简介
cinatra是一个高性能易用的http框架,它是用modern c++(c++17)开发的,它的目标是提供一个快速开发的c++ http框架。它的主要特点如下:
统一而简单的接口,header-only,跨平台,高效,支持面向切面编程
cinatra目前支持了http1.1/1.0和websocket, 你可以用它轻易地开发一个http服务器,比如常见的数据库访问服务器、文件上传下载服务器、实时消息推送服务器,你也可以基于cinatra开发一个mqtt服务器。
如何使用
编译依赖
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
5行代码就可以实现一个简单http服务器了,用户不需要关注多少细节,直接写业务逻辑就行了。
示例2:展示如何取header和query以及错误返回
示例3:面向切面的http服务器
本例中有两个切面,一个校验http请求的切面,一个是日志切面,这个切面用户可以根据需求任意增加。本例会先检查http请求的合法性,如果不合法就会返回bad request,合法就会进入下一个切面,即日志切面,日志切面会打印出一个before表示进入业务逻辑之前的处理,业务逻辑完成之后会打印after表示业务逻辑结束之后的处理。
示例4:文件上传
cinatra目前支持了multipart和octet-stream格式的上传。
multipart文件上传
短短几行代码就可以实现一个http文件上传的服务器了,包含了异常处理和错误处理。
octet-stream文件上传
示例5:文件下载
示例6:websocket
性能测试
测试用例:
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项目
关注小编,在这里,我们分享程序员相关技术,职场生活,行业热点资讯。不定期还会分享IT趣文和趣图。这里属于我们程序员自己的生活,工作和娱乐空间