Lua Web快速开发指南(1) - 初识cf框架

作者: 水果糖的小铺子(CandyMi)

cf是什么?

cf全称为: CoreFramework. 一个基于Reactor事件驱动与协程的lua高性能网络框架, 目前主要面向HTTP Application开发.

cf内部主要实现了包括HTTP与HTTP Over Websoket协议的Server, 利用轻量级协程可以很轻松保持成千上万的长连接.

cf内置了丰富的开发库与常见的第三方协议, 目前在快速开发业务原型上有不可比拟的优势.

cf的C代码与lua封装的框架内部实现源码仅几千行,同时在源码包含了一系列中文注释方便大家阅读与code review.

cf的优势:

1. 学习优势

  • 全中文的wiki、issue.

  • 简单的Lua语法、快速的入门教程.

  • 丰富的内置库、高效的使用方式.

2. 开发优势

在使用cf进行业务开发时, cf框架丰富的内置库会开始给予我们很大的帮助:

  • httpd库

httpd为开发者提供了三种路由注入方式: api接口路由、use页面路由、 websocket路由. 这些方法赋予了httpd库在面对API、HTML、Websocket时的处理能力.

httpd还主动提供一个非常简单的静态文件服务器, 为开发者在开发期间提供诸如nginx那般静态文件查找的读取行为并且不依赖chroot的文件路径健康检查功能.

  • httpc库

httpc库提供了一套普通场景与微服务架构等常见的接口请求方案.

使用者可以使用最简单的httpc.posthttpc.posthttpc.jsonhttpc.file方法快速完成业务原型开发.

也可以使用httpc.class创建一个httpc对象后, 再使用上述方法进行业务开发. 不同的是连接在httpc对象close之前是不会被主动关闭的.

开发者还可以使用httpc.multi_request方法同时并发请求多个第三方接口, 这个异步方法会在所有接口请求完成(超时)后一起返回给调用者.

以上功能都是httpc内置的功能.

  • DB/Cache库

每当使用Lua语言进行开发的时候, 还需要思考连接池与连接复用的问题时. 可以尝试看看cf的mysql与redis封装的DB/Cache库.

是的. DB与Cache库的最大作用就是: 断线重连、连接复用、连接自动管理. 这也是DB/Cache库存在的主要原因.

  • MQ库

MQ库为开发者提供了一套跨进程的应用、实例共享的MQ发布与订阅解决方案, 目前实现了这些协议: stomp/redis/mqtt.

MQ库主要解决:异步任务发布、全局广播订阅、任务排队等等一系列特殊场景.

  • 其它

内置了一些第三方或者自行实现的库, 诸如:mail、json/xml、crypt、admin、cf; 这些都是业务开发的好帮手.

3. 性能优势

cf的源码追求的是KISS原则 - "以简单明了为主", 性能与稳定仅仅是使用C语言编写后所携带的附赠品而已.

使用Lua作为开发脚本语言也是因为高效的运行时与极低的内存占用浮动更能保证有效利用资源.

使用对象重用的方式来缓解频繁对象分配与释放造成的性能消耗, 减少内存碎片产生并且高效利用内存(即使是默认内存分配器).

使用Lua C API提供的第三方加密、编码、协议解析方式, 用以平衡Lua做字符串处理带来的一些性能问题.

4. 自主集成

大部分的框架使用者习惯fork一个足够稳定的版本, 直到框架作者释放出下一个足够稳定的版本后才会尝试(或许不会)更新框架本身.

为了防止较为复杂的目录引用, cf提供了3rd目录来分离出用户自定义集成的库. 而这个文件夹内提供了联合编译所用到的文件makefile.

您在编译cf时(buildrebuildclean)都将传入到这个目录的makefile下.

makefile的作用不仅仅是编译用到的文件, 也可以是使用者自己脚本的管理集合. 总而言之, 就是使用者要怎么集成都随心所欲.

5. 部署优势

cf目前内置的httpd库可以独立提供稳定的httpd服务, 但是还是建议使用代理(负载均衡)软件进行构建安全(SSL)连接环境.

cf轻量级的依赖很适合批量部署, 无论是运用在CaaS环境还是传统宿主机的环境下都可以很轻松的完成启动.

cf项目的docker目录下提供了一份Dockerfile文件, 里面包含:

  • 从安装依赖到运行的所有步奏.

  • 快速启动的docker-compose部署文件.

  • 基于负载均衡器的动态伸缩的配置示例.

哪些人适合使用cf?

  • 动手能力较强的C/C++开发者

  • 当前语言级执行效率无法满足要求的开发者

  • 需要更为轻量级开发Web Service的开发者

  • 需要深度依赖容器的轻量级Web开发者

  • 适合无任何经验快速学习后端开发的新手

  • 简单来说就是适合所有想快速学习后端开发的人

极速安装

  • 利用docker快速下载、安装、运行

作者为docker使用者提供了一套预览镜像方便cf框架的学习者快速安装.

首先使用git将cf项目克隆下来并重命名为app, 然后进入到app目录下. 参考命令: git clone https://github.com/CandyMi/core_framework app

然后根据不同平台的要求安装dockerdocker-compose, 这需要您自行根据实际情况参考如何进行安装.

最后, 进入app/docker目录, 使用docker-compose -f docker-compose-with-cfadmin.yaml up命令运行cfadmin测试镜像并查看效果.

  • 在宿主机上快速下载、安装、运行

cf原生运行环境支持Mac、Linux、FreeBSD. 非这类平台请使用上一种安装方式.

先使用git将cf项目克隆下来并重命名为app, 然后进入到app目录下. 参考命令: git clone https://github.com/CandyMi/core_framework app

然后根据实际使用的操作系统使用setenvexport导入编译环境头文件查找目录与编译环境库文件目录: /usr/include/lib/usr/include/include.

然后开始安装依赖库:

  • 安装readline-devel、make、autoconf、gcc、file、openssl/libressl; 推荐使用第三方包管理工具(apt/pacman/yum/brew/pkg)直接安装二进制版本.

  • 安装libev; 可以在这里下载, 使用./configure —prefix=/usr/local && make && make install进行安装

  • 安装lua5.3; 可以在这里点击下载源码, 根据实际平台替换后面的命令make linux/macosx/freebsd MYCFLAGS=-fPIC && make install进行安装.

  • 最后开始编译安装cf. 进入./app目录使用sudo make build进行安装, 非管理员用户需要sudo. 如错误则安装完成.

测试

1. 测试基准

这里有一份基准测试.

2. 测试代码

在项目目录下的script文件夹下, 有需要测试文件方便大家自行测试使用.

3. 测试后台

请参照(快速cfadmin后台体验)[https://github.com/CandyMi/core_framework/wiki/cfadmin]

如何快速得到帮助

github

Wiki

Issue

继续学习

下一章节我们会开始了解如何运行cf与利用httpd库搭建高效稳定的web开发环境.