Lua Web快速開發(fā)指南(1) - 初識cf框架

2019-06-18 22:52 更新

cf是什么?

cf全稱為: CoreFramework. 一個基于Reactor事件驅(qū)動與協(xié)程的lua高性能網(wǎng)絡框架, 目前主要面向HTTP Application開發(fā).

cf內(nèi)部主要實現(xiàn)了包括HTTP與HTTP Over Websoket協(xié)議的Server, 利用輕量級協(xié)程可以很輕松保持成千上萬的長連接.

cf內(nèi)置了豐富的開發(fā)庫與常見的第三方協(xié)議, 目前在快速開發(fā)業(yè)務原型上有不可比擬的優(yōu)勢.

cf的C代碼與lua封裝的框架內(nèi)部實現(xiàn)源碼僅幾千行,同時在源碼包含了一系列中文注釋方便大家閱讀與code review.

cf的優(yōu)勢:

1. 學習優(yōu)勢

  • 全中文的wiki、issue.

  • 簡單的Lua語法、快速的入門教程.

  • 豐富的內(nèi)置庫、高效的使用方式.

2. 開發(fā)優(yōu)勢

在使用cf進行業(yè)務開發(fā)時, cf框架豐富的內(nèi)置庫會開始給予我們很大的幫助:

  • httpd庫

httpd為開發(fā)者提供了三種路由注入方式: api接口路由、use頁面路由、 websocket路由. 這些方法賦予了httpd庫在面對API、HTML、Websocket時的處理能力.

httpd還主動提供一個非常簡單的靜態(tài)文件服務器, 為開發(fā)者在開發(fā)期間提供諸如nginx那般靜態(tài)文件查找的讀取行為并且不依賴chroot的文件路徑健康檢查功能.

  • httpc庫

httpc庫提供了一套普通場景與微服務架構等常見的接口請求方案.

使用者可以使用最簡單的httpc.post、httpc.post、httpc.json、httpc.file方法快速完成業(yè)務原型開發(fā).

也可以使用httpc.class創(chuàng)建一個httpc對象后, 再使用上述方法進行業(yè)務開發(fā). 不同的是連接在httpc對象close之前是不會被主動關閉的.

開發(fā)者還可以使用httpc.multi_request方法同時并發(fā)請求多個第三方接口, 這個異步方法會在所有接口請求完成(超時)后一起返回給調(diào)用者.

以上功能都是httpc內(nèi)置的功能.

  • DB/Cache庫

每當使用Lua語言進行開發(fā)的時候, 還需要思考連接池與連接復用的問題時. 可以嘗試看看cf的mysql與redis封裝的DB/Cache庫.

是的. DB與Cache庫的最大作用就是: 斷線重連、連接復用、連接自動管理. 這也是DB/Cache庫存在的主要原因.

  • MQ庫

MQ庫為開發(fā)者提供了一套跨進程的應用、實例共享的MQ發(fā)布與訂閱解決方案, 目前實現(xiàn)了這些協(xié)議: stomp/redis/mqtt.

MQ庫主要解決:異步任務發(fā)布、全局廣播訂閱、任務排隊等等一系列特殊場景.

  • 其它

內(nèi)置了一些第三方或者自行實現(xiàn)的庫, 諸如:mail、json/xml、crypt、admin、cf; 這些都是業(yè)務開發(fā)的好幫手.

3. 性能優(yōu)勢

cf的源碼追求的是KISS原則 - "以簡單明了為主", 性能與穩(wěn)定僅僅是使用C語言編寫后所攜帶的附贈品而已.

使用Lua作為開發(fā)腳本語言也是因為高效的運行時與極低的內(nèi)存占用浮動更能保證有效利用資源.

使用對象重用的方式來緩解頻繁對象分配與釋放造成的性能消耗, 減少內(nèi)存碎片產(chǎn)生并且高效利用內(nèi)存(即使是默認內(nèi)存分配器).

使用Lua C API提供的第三方加密、編碼、協(xié)議解析方式, 用以平衡Lua做字符串處理帶來的一些性能問題.

4. 自主集成

大部分的框架使用者習慣fork一個足夠穩(wěn)定的版本, 直到框架作者釋放出下一個足夠穩(wěn)定的版本后才會嘗試(或許不會)更新框架本身.

為了防止較為復雜的目錄引用, cf提供了3rd目錄來分離出用戶自定義集成的庫. 而這個文件夾內(nèi)提供了聯(lián)合編譯所用到的文件makefile.

您在編譯cf時(build、rebuildclean)都將傳入到這個目錄的makefile下.

makefile的作用不僅僅是編譯用到的文件, 也可以是使用者自己腳本的管理集合. 總而言之, 就是使用者要怎么集成都隨心所欲.

5. 部署優(yōu)勢

cf目前內(nèi)置的httpd庫可以獨立提供穩(wěn)定的httpd服務, 但是還是建議使用代理(負載均衡)軟件進行構建安全(SSL)連接環(huán)境.

cf輕量級的依賴很適合批量部署, 無論是運用在CaaS環(huán)境還是傳統(tǒng)宿主機的環(huán)境下都可以很輕松的完成啟動.

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

  • 從安裝依賴到運行的所有步奏.

  • 快速啟動的docker-compose部署文件.

  • 基于負載均衡器的動態(tài)伸縮的配置示例.

哪些人適合使用cf?

  • 動手能力較強的C/C++開發(fā)者

  • 當前語言級執(zhí)行效率無法滿足要求的開發(fā)者

  • 需要更為輕量級開發(fā)Web Service的開發(fā)者

  • 需要深度依賴容器的輕量級Web開發(fā)者

  • 適合無任何經(jīng)驗快速學習后端開發(fā)的新手

  • 簡單來說就是適合所有想快速學習后端開發(fā)的人

極速安裝

  • 利用docker快速下載、安裝、運行

作者為docker使用者提供了一套預覽鏡像方便cf框架的學習者快速安裝.

首先使用git將cf項目克隆下來并重命名為app, 然后進入到app目錄下. 參考命令: git clone https://github.com/CandyMi/core_framework app

然后根據(jù)不同平臺的要求安裝dockerdocker-compose, 這需要您自行根據(jù)實際情況參考如何進行安裝.

最后, 進入app/docker目錄, 使用docker-compose -f docker-compose-with-cfadmin.yaml up命令運行cfadmin測試鏡像并查看效果.

  • 在宿主機上快速下載、安裝、運行

cf原生運行環(huán)境支持Mac、Linux、FreeBSD. 非這類平臺請使用上一種安裝方式.

先使用git將cf項目克隆下來并重命名為app, 然后進入到app目錄下. 參考命令: git clone https://github.com/CandyMi/core_framework app

然后根據(jù)實際使用的操作系統(tǒng)使用setenvexport導入編譯環(huán)境頭文件查找目錄與編譯環(huán)境庫文件目錄: /usr/include/lib/usr/include/include.

然后開始安裝依賴庫:

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

  1. 安裝libev; 可以在這里下載, 使用./configure --prefix=/usr/local && make && make install進行安裝

  1. 安裝lua5.3; 可以在這里點擊下載源碼, 根據(jù)實際平臺替換后面的命令make linux/macosx/freebsd MYCFLAGS=-fPIC && make install進行安裝.

  1. 最后開始編譯安裝cf. 進入./app目錄使用sudo make build進行安裝, 非管理員用戶需要sudo. 如錯誤則安裝完成.

測試

1. 測試基準

這里有一份基準測試.

2. 測試代碼

在項目目錄下的script文件夾下, 有需要測試文件方便大家自行測試使用.

3. 測試后臺

請參照(快速cfadmin后臺體驗)[https://github.com/CandyMi/core_framework/wiki/cfadmin]

如何快速得到幫助

github

Wiki

Issue

繼續(xù)學習

下一章節(jié)我們會開始了解如何運行cf與利用httpd庫搭建高效穩(wěn)定的web開發(fā)環(huán)境.

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號