認(rèn)識(shí)skynet(3)--例子代碼分析

Skynet啟動(dòng)examples/config腳本,通過start=”main”開啟了第一個(gè)Skynet的服務(wù)main.lua,這個(gè)文件也在examples中,我們看看這個(gè)文件寫的什么:

例子源碼


第一行先引用skynet這個(gè)庫,這個(gè)是用lua寫的,即lualib/skynet.lua蛔琅。里面定義了這些接口:

skynet.start(): 用于"服務(wù)(service)"的入口函數(shù),加載lua的service服務(wù)時(shí)會(huì)先運(yùn)行這里的代碼,它調(diào)用了luaclib-src/lua_skynet.c里面的callback(),最終調(diào)用Skynet的框架skynet_callback()來設(shè)置回調(diào)函數(shù)。

skynet.newservice(): 用于啟動(dòng)一個(gè)lua寫的"服務(wù)(service)",省略掉.lua后綴名铜犬。它調(diào)用了skynet.call(), 然后skynet.call()調(diào)用luaclib-src/lua_skynet.c里面的send(), 最終調(diào)用Skynet的框架的skynet_send()壓入隊(duì)列耳贬。skynet.call()用于發(fā)送一條消息給Skynet的框架肮疗。消息會(huì)壓入隊(duì)列,等待Skynet框架的調(diào)度践险。

skynet.exit(): 移除"服務(wù)(service)",通過skynet.send()發(fā)送一條消息給Skynet框架來移除lua的這個(gè)"服務(wù)(service)"稀颁。

skynet.monitor(): 用于監(jiān)視"服務(wù)(service)",看它是否關(guān)閉馏谨。


main.lua一共打開了四個(gè)服務(wù):

1别渔、service_mgr這個(gè)是系統(tǒng)的模塊,用于管理服務(wù)。

2惧互、console這個(gè)是系統(tǒng)的模塊,用于輸出哎媚。

3、simpledb這個(gè)是例子的模塊,用于管理Key–Value數(shù)據(jù)喊儡。

4拨与、watchdog這個(gè)是例子的模塊,用于監(jiān)視socket端口,等待數(shù)據(jù)。


main.lua沒有調(diào)用其它函數(shù), 加載完服務(wù), 它也就完成了任務(wù), 所以它最后調(diào)用了skynet.exit()把自己殺掉了艾猜。

現(xiàn)在Skynet已經(jīng)啟動(dòng)了watchdog服務(wù),監(jiān)聽著8888端口,等待客戶端的鏈接买喧。

下面是watchdog服務(wù)的skynet_start()開始函數(shù):

watchdog

skynet.dispatch()這個(gè)服務(wù)的回調(diào)函數(shù),通過SOCKET[]來調(diào)用函數(shù),這些函數(shù)有:

SOCKET.open()打開agent服務(wù)并啟動(dòng),使用gate來管理socket。SOCKET.close()關(guān)閉agent服務(wù)匆赃。

SOCKET.error()打印錯(cuò)誤信息淤毛。

SOCKET.data()有數(shù)據(jù)到來。


下面就來看看agent服務(wù)的代碼:

agent服務(wù)

前面watchdog調(diào)用SOCKET.open()的時(shí)候就調(diào)用了這里的CMD.start(),在客戶端輸出了”Welcome to skynet”炸庞。

Agent服務(wù)的核心就是注冊了協(xié)議,并根據(jù)協(xié)議把數(shù)據(jù)發(fā)送給simpledb服務(wù)去處理:

Agent注冊協(xié)議

協(xié)議的詳細(xì)部分看lualib/skynet.lua钱床。

最后我們看看simpledb服務(wù):

simpledb服務(wù)

simpledb服務(wù)只是很簡單的處理了SET和GET。


以上只是大概瀏覽了一遍Skynet附帶的例子,了解了一些Skynet提供給lua使用的接口,其他接口可以查看skynet.lua代碼埠居。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末查牌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滥壕,更是在濱河造成了極大的恐慌纸颜,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绎橘,死亡現(xiàn)場離奇詭異胁孙,居然都是意外死亡唠倦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門涮较,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稠鼻,“玉大人,你說我怎么就攤上這事狂票『虺荩” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵闺属,是天一觀的道長慌盯。 經(jīng)常有香客問我,道長掂器,這世上最難降的妖魔是什么亚皂? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮国瓮,結(jié)果婚禮上灭必,老公的妹妹穿的比我還像新娘。我一直安慰自己巍膘,他們只是感情好厂财,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峡懈,像睡著了一般璃饱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肪康,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天荚恶,我揣著相機(jī)與錄音,去河邊找鬼磷支。 笑死谒撼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雾狈。 我是一名探鬼主播廓潜,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼善榛!你這毒婦竟也來了辩蛋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤移盆,失蹤者是張志新(化名)和其女友劉穎悼院,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咒循,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡据途,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年绞愚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颖医。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡位衩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出便脊,到底是詐尸還是另有隱情蚂四,我是刑警寧澤光戈,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布哪痰,位于F島的核電站,受9級特大地震影響久妆,放射性物質(zhì)發(fā)生泄漏晌杰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一筷弦、第九天 我趴在偏房一處隱蔽的房頂上張望肋演。 院中可真熱鬧,春花似錦烂琴、人聲如沸爹殊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梗夸。三九已至,卻和暖如春号醉,著一層夾襖步出監(jiān)牢的瞬間反症,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工畔派, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铅碍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓线椰,卻偏偏與公主長得像胞谈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子憨愉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容