作者:shihuaping0918@163.com,轉(zhuǎn)載請(qǐng)注明作者
目前大部人使用skynet進(jìn)行開發(fā)的時(shí)候,都是直接在skynet的源碼目錄下直接開發(fā)的。這樣有一個(gè)不好的地方就是,自己的代碼和skynet本身的代碼混在一起,項(xiàng)目交接或者是有新成員加入的時(shí)候,比較容易迷惑,到底哪些文件才是我要關(guān)注的。
如果不是對(duì)skynet進(jìn)行二次開發(fā),對(duì)skynet進(jìn)行擴(kuò)展。僅僅是使用它,完全是可以項(xiàng)目獨(dú)立于skynet源碼結(jié)構(gòu)的。下面來(lái)看看怎么實(shí)現(xiàn),將項(xiàng)目從skynet中獨(dú)立出來(lái)。
首先要關(guān)注一下config.path文件,這個(gè)文件是將項(xiàng)目源碼從skynet中獨(dú)立出來(lái)的關(guān)鍵。
skynet/example/config.path
root = "./"
luaservice = root.."service/?.lua;"..root.."test/?.lua;"..root.."examples/?.lua;"..root.."test/?/init.lua"
lualoader = root .. "lualib/loader.lua"
lua_path = root.."lualib/?.lua;"..root.."lualib/?/init.lua"
lua_cpath = root .. "luaclib/?.so"
snax = root.."examples/?.lua;"..root.."test/?.lua"
root代表的是skynet所在的目錄。
luaservice代表服務(wù)所在的目錄。
lualoader 用哪一段 lua 代碼加載 lua 服務(wù)。通常配置為 lualib/loader.lua ,再由這段代碼解析服務(wù)名稱,進(jìn)一步加載 lua 代碼。不用去修改它。
lua_path和lua_cpath代表require要加載的文件所在的目錄。
snax代表使用snax框架寫的服務(wù)所在的目錄,暫時(shí)不涉及,忽略。
先來(lái)確定一下項(xiàng)目目錄結(jié)構(gòu):
假定項(xiàng)目放在用戶目錄下,/home/xxx,xxx就是用戶名,全路徑是/home/xxx/skynet_howto?;蛘呖梢杂?code>echo ~/來(lái)定位用戶目錄。然后在這個(gè)目錄下建一個(gè)叫skynet_howto的目錄。
skynet_howto
|---- lib
|---- service
|---- xx_svr
|---- yy_svr
|---- config
|---- bin
假定項(xiàng)目目錄結(jié)構(gòu)如上所示,lib下用來(lái)放通用代碼,service下用來(lái)放服務(wù)代碼,xx_svr和yy_svr用來(lái)放各個(gè)獨(dú)立的進(jìn)程代碼。config用來(lái)放配置文件。bin下面用來(lái)放啟動(dòng)腳本。
項(xiàng)目結(jié)構(gòu)劃分好了以后,現(xiàn)在再回頭來(lái)寫config.path。需要新增一個(gè)proj_root代表項(xiàng)目源碼所在的目錄。然后把項(xiàng)目的service和lib加到config.path里。
lua_path和lua_cpath和linux環(huán)境變量一樣,是以;分號(hào)分割的,可以配很多個(gè)路徑。對(duì)于luaservice也是一樣。所以只需要做一點(diǎn)點(diǎn)改動(dòng)就可以了。
skynet_howto/config/config.path
root = "/Users/shihuaping/github/skynet/"
proj_root = "/Users/shihuaping/github/skynet_howto/"
luaservice = root.."service/?.lua;"
..proj_root.."service/?.lua"
lualoader = root .. "lualib/loader.lua"
lua_path = root.."lualib/?.lua;"
..root.."lualib/?/init.lua;"
..proj_root.."lib/?.lua"
lua_cpath = root .. "luaclib/?.so"
snax = root.."examples/?.lua;"..root.."test/?.lua"
?詳細(xì)的配置請(qǐng)參考
https://github.com/cloudwu/skynet/wiki/Config
到了這里,依賴相關(guān)的配置基本就寫完了。再把skynet/config/config文件拷貝到skynet_howto/config/下面。把上一篇講的echo.lua和test_echo.lua拷到skynet_howto/service下面。
運(yùn)行的時(shí)候和前面有所不同的是,skynet可執(zhí)行文件已經(jīng)不在當(dāng)前目錄了。所以要寫全路徑。
首先確保自己在skynet_howto目錄下。然后執(zhí)行:
/Users/shihuaping/github/skynet/skynet ./config/config
到此為止,就實(shí)現(xiàn)了在skynet目錄之外寫lua代碼,并且運(yùn)行的目標(biāo)。避免了對(duì)skynet代碼結(jié)構(gòu)的侵入。
如果覺(jué)得這篇文章對(duì)您有所幫助,請(qǐng)點(diǎn)贊或者賞杯咖啡