资讯专栏INFORMATION COLUMN

lua web快速开发指南(1) - 初识cf框架

Cheng_Gang / 3135人阅读

摘要:作者水果糖的小铺子是什么全称为一个基于事件驱动与协程的高性能网络框架目前主要面向开发内部主要实现了包括与协议的利用轻量级协程可以很轻松保持成千上万的长连接内置了丰富的开发库与常见的第三方协议目前在快速开发业务原型上有不可比拟的优势的代码与封

作者: 水果糖的小铺子(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/co...]

如何快速得到帮助

github

Wiki

Issue

继续学习

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/59516.html

相关文章

  • lua web快速开发指南(3) - 初识httpd库路由

    摘要:本章假设您已经知道如何快速搭建并且知道的启动流程与运行流程知晓如何创建与启动回顾上一章节我们利用内置库快速实现了一套静态文件其中包括静态文件目录指定与端口设置并且在启动后可以在看到测试页面什么是路由与路由表路由用于描述资源到处理函数之间 本章假设您已经知道httpd server如何快速搭建, 并且知道cf的启动流程与运行流程, 知晓httpd如何创建与启动. 回顾上一章节 -- sc...

    zr_hebo 评论0 收藏0
  • lua web快速开发指南(2) - cf的运行机制简介与基于httpd库的开发环境搭建

    摘要:从本章开始假设大家都熟悉语法运行流程在上一章节学会了如何安装后本章节就会介绍到运行机制与的搭建是一个非常典型的基于协程的事件驱动开发框架在封装成后可以依赖事件循环执行一套稳定运行时环境而本身提供了强大的数据结构可以根据需要自行构建所谓的所以 从本章开始假设大家都熟悉lua语法. 运行流程 在上一章节学会了如何安装cf后, 本章节就会介绍cf到运行机制与httpd的server搭建! c...

    Batkid 评论0 收藏0
  • lua web快速开发指南(6) - Cache、DB介绍

    摘要:数据库与缓存的基本概念数据库与缓存是服务端开发人员的必学知识点数据库数据库是一种信息记录存取的虚拟标记地点的集合统称比如现实生活中我们经常会用到文件柜书桌等等数据存取容器在对容器进行数据存取的时候我们会为每一层打上一个标签表示一种分类项而这 数据库与缓存的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 数据库是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中,...

    daryl 评论0 收藏0
  • lua web快速开发指南(6) - Cache、DB介绍

    摘要:数据库与缓存的基本概念数据库与缓存是服务端开发人员的必学知识点数据库数据库是一种信息记录存取的虚拟标记地点的集合统称比如现实生活中我们经常会用到文件柜书桌等等数据存取容器在对容器进行数据存取的时候我们会为每一层打上一个标签表示一种分类项而这 数据库与缓存的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 数据库是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中,...

    Yi_Zhi_Yu 评论0 收藏0
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布

    摘要:是一个运行在上的基于编写的框架,当前最新版本是预览版,重构了之前发布的版本。主要特性已经,下个版本为,着重于修复当前路由的匹配。更多使用方法,请参考测试用例。 Lor是一个运行在OpenResty上的基于Lua编写的Web框架,当前最新版本是0.0.2预览版,重构了之前发布的0.0.1版本。主要API特性已经freeze,下个版本为0.0.3,着重于修复当前路由的匹配bug。 特性 ...

    fnngj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<