最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【Drogon】框架是如何幫我們讀取配置文件的

2022-05-26 01:13 作者:唐龍3bf  | 我要投稿

目前出了一些Drogon框架的視頻,視頻的內(nèi)容更多的偏向于使用,并沒(méi)有過(guò)多的涉及到源碼,我打算用專(zhuān)欄的形式來(lái)解讀一下框架的源碼,這篇文章算是試試水。

我們可以使用如下命令創(chuàng)建一個(gè)新的項(xiàng)目:

默認(rèn)的main.cc文件內(nèi)只是監(jiān)聽(tīng)了一個(gè)80端口號(hào),并在主函數(shù)的最后使用app().run();運(yùn)行起整個(gè)框架。

對(duì)main.cc文件做出如下修改:

從官方的wiki文檔以及生成的默認(rèn)代碼的注釋中我們都可以得知app().loadConfigFile()函數(shù)可以加載一個(gè)json格式的文件并進(jìn)行相應(yīng)的配置。同時(shí)修改后的代碼也使用了鏈?zhǔn)秸{(diào)用,這一點(diǎn)并不重要,只是讓代碼看起來(lái)更簡(jiǎn)潔一些。

app()的調(diào)用鏈如下:app() → HttpappFramework::instance() → HttpappFrameworkImpl::instance()。其中HttpappFramework類(lèi)是一個(gè)抽象類(lèi),Impl是它的一個(gè)子類(lèi)。最終會(huì)返回給我們一個(gè)Impl類(lèi)的實(shí)例。

loadConfigFile的實(shí)現(xiàn)如下:

ConfigLoader的構(gòu)造函數(shù):

ConfigLoader::load()函數(shù)內(nèi)容如下:

其中的每一個(gè)函數(shù)都會(huì)從構(gòu)造函數(shù)里讀取完的內(nèi)容取出一條子項(xiàng)并進(jìn)行逐條分析,其中的重頭戲是loadapp:

loadapp里讀取了43條app的子項(xiàng)(默認(rèn)生成的config.json文件中只有39條),調(diào)用了35個(gè)不同的配置函數(shù)完成了自動(dòng)配置。

比如enable_session以及session_timeout兩條配置項(xiàng)決定調(diào)用enableSession還是disableSession函數(shù),以及在調(diào)用enableSession的同時(shí)設(shè)置過(guò)期時(shí)間。

以app().setDocumentRoot()函數(shù)為例:

它做的事情很簡(jiǎn)單,就是把傳進(jìn)來(lái)的參數(shù)存儲(chǔ)到了成員變量中。

后續(xù)在調(diào)用app().run()的時(shí)候會(huì)讀取這些成員變量的值來(lái)決定具體的操作:

比如在run()→setupFileLogger()函數(shù)中,就會(huì)讀取logfileBaseName_成員變量。

這一個(gè)成員變量是在app().setLogPath()函數(shù)中設(shè)置的,我們當(dāng)然可以直接調(diào)用這個(gè)函數(shù)來(lái)進(jìn)行設(shè)置,但是在ConfigLoader::loadLogSetting()函數(shù)中會(huì)自動(dòng)幫我們調(diào)用,而ConfigLoader::loadapp()在調(diào)用這個(gè)函數(shù)時(shí)會(huì)自動(dòng)傳遞進(jìn)來(lái)app["log"]。

所以我們既可以直接調(diào)用app().setLogPath(),又可以通過(guò)在配置文件中編寫(xiě)app.log,來(lái)實(shí)現(xiàn)設(shè)置日志文件的存儲(chǔ)位置。

源碼之前,了無(wú)秘密。

而drogon源碼的閱讀,loadConfigFile()是一個(gè)不錯(cuò)的入手點(diǎn)。

【Drogon】框架是如何幫我們讀取配置文件的的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
石家庄市| 富顺县| 龙井市| 荆州市| 裕民县| 和龙市| 剑阁县| 伊吾县| 富川| 台东市| 满城县| 收藏| 蒲江县| 高雄县| 石景山区| 井研县| 邛崃市| 年辖:市辖区| 扎兰屯市| 台南市| 西乡县| 绥江县| 灵山县| 额尔古纳市| 镇巴县| 长子县| 杭锦后旗| 伊春市| 乌鲁木齐县| 昭苏县| 城口县| 县级市| 名山县| 九龙坡区| 阿坝县| 筠连县| 廉江市| 德钦县| 建瓯市| 葵青区| 昌乐县|