文档章节

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

水果糖的小铺子
 水果糖的小铺子
发布于 06/14 01:41
字数 2016
阅读 137
收藏 3

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.

    然后开始安装依赖库:

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

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

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

    4. 最后开始编译安装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开发环境.

© 著作权归作者所有

水果糖的小铺子
粉丝 23
博文 153
码字总数 73315
作品 1
广州
程序员
私信 提问
Lua Web快速开发指南(3) - 初识httpd库路由

本章假设您已经知道httpd server如何快速搭建, 并且知道cf的启动流程与运行流程, 知晓httpd如何创建与启动. 回顾上一章节 我们利用httpd内置库快速实现了一套httpd静态文件server, 其中包括静...

水果糖的小铺子
06/14
22
0
core_framework —— 基于libev的轻量级lua网络开发框架

大道至简, 返璞归真. 前言 在发表这篇博文的前夕, 还有一些小伙伴在提问一些以下相关的问题: 性能怎么样? 是否容易上手? 开发目标在哪? 如何反馈问题? 对比行业内的lua开源项目有何优势? 等...

水果糖
03/27
89
0
Lua Web快速开发指南(2) - cf的运行机制简介与基于httpd库的开发环境搭建

从本章开始假设大家都熟悉lua语法. 运行流程 在上一章节学会了如何安装cf后, 本章节就会介绍cf到运行机制与httpd的server搭建! cf是一个非常典型的基于协程的事件驱动开发框架在封装成API后,...

水果糖的小铺子
06/14
35
0
Lua Web快速开发指南(9) - 使用cf内置的异步库

API 介绍 cf框架提供内置的异步库, 需要使用的时候我们必须先导入API: . 定时器与循环定时器 cf库内置了一些定时器方法, 这些方法为开发者提供了对时间事件的控制能力. 、、. 方法是一个的定...

水果糖的小铺子
06/23
17
0
cf 0.3.1发布, 持续更新与优化 Lua Web 应用框架

core_framework 是一个基于 libev 的轻量级 lua 网络开发框架。cf 使用 lua 脚本语言进行服务端业务逻辑开发, 在其内部实现了多种网络协议与第三方库用来帮助使用者进行项目原型的快速开发。...

水果糖的小铺子
07/01
693
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部