分类目录归档:社区开源项目

feather以及ormpp linux依赖库的安装

Debian分支的linux下
1.安装mysql开发库 sudo apt-get install libmysqlclient-dev
2.安装postgresql开发库 sudo apt-get install libpq-dev
3.安装sqlite3开发库 sudo apt-get install libsqlite3-dev
4.安装uuid库 sudo apt-get install uuid
5.安装zlib库 sudo apt-get install zlib1g-dev
6.安装openssl库 sudo apt-get install libssl-dev

Centos下依赖安装 (建议centos7.0+)
1.安装mysql开发库 sudo yum install mysql-devel
2.安装postgresql开发库 sudo yum install postgresql-devel.x86_64
3.安装sqlite3开发库 sudo yum install sqlite-devel.x86_64
4.安装uuid库 sudo yum install libuuid-devel.x86_64
5.安装zlib库 sudo yum install zlib-devel.x86_64
6.安装openssl库 sudo yum install openssl-devel.x86_64

asio库的依赖安装
如果不想安装使用完整boost 可以只安装asio模块 这是官方下载地址http://think-async.com/Asio/AsioStandalone
如果使用的是ubuntu18.0系统的 可以直接通过命令安装最新的boost sudo apt-get install boost
boost安装方法如下
https://www.boost.org/下载最新的boost库
tar xvf 解压后 进入相应目录执行
1 ./bootstrap.sh
2 ./b2 –without-python
等待编译完成后 执行 sudo ./b2 install
成功执行以上步骤就完成了boost库的安装

如果只需要使用cinatra框架 只需要安装zlib ssl uuid boost.asio即可正常通过编译

cinatra模板引擎使用

渲染一个简单的html模板

通过render_view这个接口 第一个参数是模板文件的相对路径 这样我们就可以给客户端返回一个html页面了

在当前模板中包含其他的模板文件
我们有一个test.html 和一个header.html 内容分别如下

服务器代码如下

这样我们就可以在业务中复用公用的模板文件 通过不同的数据去渲染想展示的内容

需要通过数据去渲染的页面
我们有一个data.html的文件 内容如下

如上使用 就能轻松的通过需要的数据渲染出一个页面

通常我们展示前端页面的时候都会需要对一个list的数据进行渲染 同样cinatra的模板也支持我们开发相关的业务
我们有一个list.html的文件,内容如下

我们可以在cinatra里面写上这么一个接口

是不是很轻松的就能完成我们的业务了

cinatra模板引擎同样支持if判断
我们有一个study.html的文件,内容如下

我们可以通过传递display=0或者1来看内容是否显示

以上列举了一些cinatra中常用的一些方法 更多的功能 大家可以在cinatra群里面一起交流学习

cinatra发布新版本

cinatra发布v0.04版本

这仍然是一个预发布版本,增加了一些有用的功能和改进了接口的易用性,欢迎大家试用!

modern c++做web开发给你飞一般的感觉!

最近改进的几个地方

cinatra本次改进增加了http缓存和更友好的html渲染接口:

示例

1.http缓存

这样就可以实现缓存了,这里设置的是全局缓存,即所有的http get请求都会缓存。

如果希望某些请求不缓存该怎么做呢?设置一个enable_cache参数即可:

这样就可以实现某个请求不缓存,除此之外的缓存。

2. 更友好的html渲染接口

cinatra最新的改进

最近改进的几个地方

cinatra本次改进主要侧重于易用性和灵活性,主要增加了下面几项功能:

  1. response时自动添加对应的mime type
  2. 支持中文
  3. 内置小的静态资源获取
  4. 支持pathinfo/*

示例

1.response时设置mime type

2.中文

3.pathinfo

4.静态资源获取

purecpp社区寻求赞助和捐赠

purecpp社区的朋友们:

非常感谢大家对purecpp社区的热爱和支持,你们的支持对于purecpp社区很重要,对于modern c++很重要。

近来频繁出现了社区网站挂掉的情况,主要原因是在云主机有限的配置下资源占用过大导致的。由于社区现在是基于wordpress(php)改造的,所以性能和并发量非常有限,因此我计划将社区网站从php更换为c++的feather,feather的性能是php的数十倍,相信社区更换为feather之后,在相同资源的情况下,能够在很长一段时间内满足使用需求。

除了更换社区框架之外还需要对云主机进行升级,需要购买新的云主机,因此需要大家赞助或捐赠,金额不限,只要能维持社区网站的正常运行即可。捐赠者名单和金额也将在社区定期公布,当然如果你不希望公布自己的捐赠信息可以在捐赠的时候注明一下。

捐赠方式:微信和支付宝
微信:
weixin

支付宝:
zfb

Feather–一个快速开发的web服务器框架

Feather是一个适合快速开发的modern c++ web框架,Feather的目标是让使用者以最小的精力和成本来开发一个web网站。

现在很多web框架都非常庞大,学习成本高,而Feather正是为了解决这些问题的,它就像它的名字feather那样轻盈,所有的一切都是为了让用户非常方便又快速地开发而不是陷入到框架的细节当中。

一个好的框架应该是能让用户轻松实现自己的想法而不是成为框架的奴隶。如果你希望轻松快速地开发一个web网站,而无需花费大量的精力去学习框架细节的话,那么Feather非常适合你!

Feather是什么?

Feather作为一个快速开发框架,它的目标是让web开发变得简单。它主要有下面几个特点:

  1. 简洁易用
  2. 高性能,modern c++(c++17)开发
  3. header only
  4. 跨平台
  5. 支持编译期反射
  6. 支持AOP

Feather框架的核心包括:
1. 一个易用的http库,支持http1.x, https, websocket
2. 一个功能强大的html模版引擎
3. 一个可扩展的ORM库,支持多种数据库(mysql,postgresql,sqlite)
4. 一个可扩展序列化库,支持多种格式(json, xml)

Feather的架构

下面是Feather的架构图:

Feather的架构图

Feather内部的四个核心组件是松耦合的,Feather只是把它们像搭积木一样搭在一起。

  1. http组件: cinatra
  2. ORM组件: ormpp
  3. 序列化组件: iguana
  4. html 模版: inja

Feather的使用

以一个简单的例子展示如何使用Feather,比如显示文章列表,几乎每个网站都有这个功能。

获取文章列表的功能很简单,它底层数据部分是一个文章表,业务逻辑层是获取这些列表,然后做html渲染。对外接口部分是一个http服务,前端后端交互的数据格式为json。为了简单起见就不考虑缓存之类的。

那么要实现这个文章列表功能用Feather怎么做呢?可以按照这些步骤去开发:

  1. 提供获取文章列表的http接口;
  2. 通过ORM提供数据库访问功能;
  3. 编写业务逻辑,根据用户请求获取文章列表并通过html模版做渲染;

接下来看看这些步骤具体是怎么做的。

获取文章列表的http接口

其中login接口是这样的:

接下来就可以测试这个http服务接口了,客户端只要发送一个http请求即可。比如发送一个这样的请求

http://127.0.0.1/get_article_list

服务器会自动路由到article_controller::get_article_list函数中,如果请求不对则会返回http错误给客户端。当服务器收到这样的请求之后就表明服务器提供的这个http服务是可用的。

接下来需要编写数据库部分的代码,由于有了ORM,所以你可以很方便地编写数据库部分的代码了,同样很简单。

通过ORM提供数据库访问功能

登录业务涉及到一个用户表,因此我们需要创建这个表,不过在创建数据库之前先确定你选用什么数据库,Feather的ORM支持mysql, postgresql和sqlite三种数据库,假设我们的数据库是mysql。我们可以通过下面的代码来创建一个用户表。

1.创建文章表

dao.create_table< article >将会在testdb数据库中自动创建一个article表,其中id字段是自增长的。

2.编写获取文章列表的逻辑(包含访问数据库)

访问数据库,序列化为json返回给客户端。

详细的例子你可以看github上的代码

Demo示例

我们用Feather开发了一个社区网站,地址在这里:http://120.78.135.113:8080/

Feather社区

致谢

Feather社区网站由我和网友XMH共同开发完成(花了两天的业余时间),XMH也是cinatra的忠实用户,不但贡献了很多代码,还提供了很多宝贵的建议,在此表示衷心的感谢!

XMH是一名热爱编程的程序猿,平时从事c++,web,移动端等开发。从事过游戏后台和APP开发。也是个忠实的mordern c++粉丝,追随着cpp的发展,喜欢通过元编程做一些小工具。热爱开源社区,也是开源项目feather的使用者,希望feather能为更多的开发者所使用,社区发展越来越好。

希望有更多人能加入进来把Feather完善得更好。

联系我们

purecpp@163.com

http://purecpp.org/

https://github.com/qicosmos/feather

cinatra–一个高效易用的c++ http框架

目录

cinatra简介

cinatra是一个高性能易用的http框架,它是用modern c++(c++17)开发的,它的目标是提供一个快速开发的c++ http框架。它的主要特点如下:

  1. 统一而简单的接口
  2. header-only
  3. 跨平台
  4. 高效
  5. 支持面向切面编程

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,因此不建议现阶段直接用于生产环境,建议先在测试环境下试用。

试用没问题了再在生产环境中使用,试用过程中发现了问题请及时提issue反馈或者邮件联系我。

测试和使用稳定之后cinatra会发布正式版。

roadmap

  1. 支持ssl
  2. 支持断点续传
  3. 支持session和cookie
  4. 接口优化、性能优化

我希望有越来越多的人使用并喜欢cinatra,也希望cinatra在使用过程中越来越完善,变成一个强大易用、快速开发的http框架,欢迎大家积极参与cinatra项目,可以提issue也可以发邮件提建议,也可以提pr,形式不限。

这次重构的cinatra几乎是重写了一遍,代码比之前的少了30%以上,接口统一了,http和业务分离,具备更好的扩展性和可维护性。

联系方式

purecpp@163.com

http://purecpp.org/

https://github.com/qicosmos/cinatra

致谢

感谢社区的“逐雁南飛”和“非常可乐”两位朋友的帮助,你们帮我澄清了一些http业务细节,同时也提出了一些宝贵意见,在此致以衷心的感谢!

一个好用的短信发送的客户端

背景

最近需要做一个登录短信验证的功能,看了不少短信平台,对于c++接口的支持不友好,有的甚至没有,有的是通过curl去实现的,还是同步的,比较难用。于是就基于boost.asio用c++17实现了一个异步的短信发送客户端, 非常好用,只有一个发送短信的接口。
现在工程中的例子是以云片短信平台为例子的,你可以很容易修改为其他的短信平台。

特点

sms_client的主要特点:

  1. header only
  2. async
  3. easy to use

快速示例

一个header only的c++ 日志库

背景

NanoLog是一个非常小巧的log库,代码很少,不到一千行,速度比spdlog还快,应用上也能满足需求,我很喜欢。但是也存在一些不足,比如日志文件的数量没有限制,每次重启之后会从头开始写等等问题,还需要进一步完善。于是我新建了一个工程nanolog,这个工程继承于nanolog,将原工程改成header only,并用了一些最新的特性来简化原来的代码。

快速示例

如何编译

由于使用了C++17的新特性,所以需要支持C++17的编译器,gcc7.2,vs2017 15.5

roadmap

  1. 增加文件数量上限
  2. 重新写日志从上次的位置继续写