skynet教程(2)--項(xiàng)目代碼獨(dú)立于skynet源碼結(jié)構(gòu)

作者: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)贊或者賞杯咖啡

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引言: 一直都是從事客戶端的開發(fā)工作,最近抽了點(diǎn)時(shí)間想了解一下服務(wù)器開發(fā)的相關(guān)知識(shí),一番博客瞎逛之后,發(fā)現(xiàn)了一個(gè)不...
    linshuhe1閱讀 5,488評(píng)論 0 10
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,311評(píng)論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,836評(píng)論 25 709
  • 一股寒流開始襲擊南方,早晚的溫差到十多度,接下來(lái)的幾天時(shí)間里,應(yīng)該都無(wú)法享受到太陽(yáng)的溫暖了。 最是讓人好奇的是,是...
    說(shuō)書客閱讀 263評(píng)論 0 0

友情鏈接更多精彩內(nèi)容