cf全稱為: CoreFramework. 一個(gè)基于Reactor事件驅(qū)動(dòng)與協(xié)程的lua高性能網(wǎng)絡(luò)框架, 目前主要面向HTTP Application開(kāi)發(fā).
cf內(nèi)部主要實(shí)現(xiàn)了包括HTTP與HTTP Over Websoket協(xié)議的Server, 利用輕量級(jí)協(xié)程可以很輕松保持成千上萬(wàn)的長(zhǎng)連接.
cf內(nèi)置了豐富的開(kāi)發(fā)庫(kù)與常見(jiàn)的第三方協(xié)議, 目前在快速開(kāi)發(fā)業(yè)務(wù)原型上有不可比擬的優(yōu)勢(shì).
cf的C代碼與lua封裝的框架內(nèi)部實(shí)現(xiàn)源碼僅幾千行,同時(shí)在源碼包含了一系列中文注釋方便大家閱讀與code review.
在使用cf進(jìn)行業(yè)務(wù)開(kāi)發(fā)時(shí), cf框架豐富的內(nèi)置庫(kù)會(huì)開(kāi)始給予我們很大的幫助:
httpd為開(kāi)發(fā)者提供了三種路由注入方式: api接口路由、use頁(yè)面路由、 websocket路由. 這些方法賦予了httpd庫(kù)在面對(duì)API、HTML、Websocket時(shí)的處理能力.
httpd還主動(dòng)提供一個(gè)非常簡(jiǎn)單的靜態(tài)文件服務(wù)器, 為開(kāi)發(fā)者在開(kāi)發(fā)期間提供諸如nginx那般靜態(tài)文件查找的讀取行為并且不依賴chroot的文件路徑健康檢查功能.
httpc庫(kù)提供了一套普通場(chǎng)景與微服務(wù)架構(gòu)等常見(jiàn)的接口請(qǐng)求方案.
使用者可以使用最簡(jiǎn)單的httpc.post
、httpc.post
、httpc.json
、httpc.file
方法快速完成業(yè)務(wù)原型開(kāi)發(fā).
也可以使用httpc.class創(chuàng)建一個(gè)httpc對(duì)象后, 再使用上述方法進(jìn)行業(yè)務(wù)開(kāi)發(fā). 不同的是連接在httpc對(duì)象close之前是不會(huì)被主動(dòng)關(guān)閉的.
開(kāi)發(fā)者還可以使用httpc.multi_request方法同時(shí)并發(fā)請(qǐng)求多個(gè)第三方接口, 這個(gè)異步方法會(huì)在所有接口請(qǐng)求完成(超時(shí))后一起返回給調(diào)用者.
以上功能都是httpc內(nèi)置的功能.
每當(dāng)使用Lua語(yǔ)言進(jìn)行開(kāi)發(fā)的時(shí)候, 還需要思考連接池與連接復(fù)用的問(wèn)題時(shí). 可以嘗試看看cf的mysql與redis封裝的DB/Cache庫(kù).
是的. DB與Cache庫(kù)的最大作用就是: 斷線重連、連接復(fù)用、連接自動(dòng)管理. 這也是DB/Cache庫(kù)存在的主要原因.
MQ庫(kù)為開(kāi)發(fā)者提供了一套跨進(jìn)程的應(yīng)用、實(shí)例共享的MQ發(fā)布與訂閱解決方案, 目前實(shí)現(xiàn)了這些協(xié)議: stomp/redis/mqtt.
MQ庫(kù)主要解決:異步任務(wù)發(fā)布、全局廣播訂閱、任務(wù)排隊(duì)等等一系列特殊場(chǎng)景.
內(nèi)置了一些第三方或者自行實(shí)現(xiàn)的庫(kù), 諸如:mail、json/xml、crypt、admin、cf; 這些都是業(yè)務(wù)開(kāi)發(fā)的好幫手.
cf的源碼追求的是KISS原則 - "以簡(jiǎn)單明了為主", 性能與穩(wěn)定僅僅是使用C語(yǔ)言編寫后所攜帶的附贈(zèng)品而已.
使用Lua作為開(kāi)發(fā)腳本語(yǔ)言也是因?yàn)楦咝У倪\(yùn)行時(shí)與極低的內(nèi)存占用浮動(dòng)更能保證有效利用資源.
使用對(duì)象重用的方式來(lái)緩解頻繁對(duì)象分配與釋放造成的性能消耗, 減少內(nèi)存碎片產(chǎn)生并且高效利用內(nèi)存(即使是默認(rèn)內(nèi)存分配器).
使用Lua C API提供的第三方加密、編碼、協(xié)議解析方式, 用以平衡Lua做字符串處理帶來(lái)的一些性能問(wèn)題.
大部分的框架使用者習(xí)慣fork一個(gè)足夠穩(wěn)定的版本, 直到框架作者釋放出下一個(gè)足夠穩(wěn)定的版本后才會(huì)嘗試(或許不會(huì))更新框架本身.
為了防止較為復(fù)雜的目錄引用, cf提供了3rd目錄來(lái)分離出用戶自定義集成的庫(kù). 而這個(gè)文件夾內(nèi)提供了聯(lián)合編譯所用到的文件makefile
.
您在編譯cf時(shí)(build
、rebuild
、clean
)都將傳入到這個(gè)目錄的makefile
下.
makefile的作用不僅僅是編譯用到的文件, 也可以是使用者自己腳本的管理集合. 總而言之, 就是使用者要怎么集成都隨心所欲.
cf目前內(nèi)置的httpd庫(kù)可以獨(dú)立提供穩(wěn)定的httpd服務(wù), 但是還是建議使用代理(負(fù)載均衡)軟件進(jìn)行構(gòu)建安全(SSL)連接環(huán)境.
cf輕量級(jí)的依賴很適合批量部署, 無(wú)論是運(yùn)用在CaaS環(huán)境還是傳統(tǒng)宿主機(jī)的環(huán)境下都可以很輕松的完成啟動(dòng).
cf項(xiàng)目的docker
目錄下提供了一份Dockerfile文件, 里面包含:
作者為docker使用者提供了一套預(yù)覽鏡像方便cf框架的學(xué)習(xí)者快速安裝.
首先使用git將cf項(xiàng)目克隆下來(lái)并重命名為app, 然后進(jìn)入到app目錄下. 參考命令: git clone https://github.com/CandyMi/core_framework app
然后根據(jù)不同平臺(tái)的要求安裝docker
與docker-compose
, 這需要您自行根據(jù)實(shí)際情況參考如何進(jìn)行安裝.
最后, 進(jìn)入app/docker
目錄, 使用docker-compose -f docker-compose-with-cfadmin.yaml up
命令運(yùn)行cfadmin測(cè)試鏡像并查看效果.
cf原生運(yùn)行環(huán)境支持Mac、Linux、FreeBSD. 非這類平臺(tái)請(qǐng)使用上一種安裝方式.
先使用git將cf項(xiàng)目克隆下來(lái)并重命名為app, 然后進(jìn)入到app目錄下. 參考命令: git clone https://github.com/CandyMi/core_framework app
然后根據(jù)實(shí)際使用的操作系統(tǒng)使用setenv
或export
導(dǎo)入編譯環(huán)境頭文件查找目錄與編譯環(huán)境庫(kù)文件目錄: /usr/include/lib
與/usr/include/include
.
然后開(kāi)始安裝依賴庫(kù):
./configure --prefix=/usr/local && make && make install
進(jìn)行安裝make linux/macosx/freebsd MYCFLAGS=-fPIC && make install
進(jìn)行安裝../app
目錄使用sudo make build
進(jìn)行安裝, 非管理員用戶需要sudo
. 如錯(cuò)誤則安裝完成.這里有一份基準(zhǔn)測(cè)試.
在項(xiàng)目目錄下的script
文件夾下, 有需要測(cè)試文件方便大家自行測(cè)試使用.
請(qǐng)參照(快速cfadmin后臺(tái)體驗(yàn))[https://github.com/CandyMi/core_framework/wiki/cfadmin]
下一章節(jié)我們會(huì)開(kāi)始了解如何運(yùn)行cf與利用httpd庫(kù)搭建高效穩(wěn)定的web開(kāi)發(fā)環(huán)境.
更多建議: