国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從零開(kāi)始實(shí)現(xiàn)一個(gè)C++高性能服務(wù)器框架----環(huán)境變量模塊

這篇具有很好參考價(jià)值的文章主要介紹了從零開(kāi)始實(shí)現(xiàn)一個(gè)C++高性能服務(wù)器框架----環(huán)境變量模塊。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

此項(xiàng)目是根據(jù)sylar框架實(shí)現(xiàn),是從零開(kāi)始重寫(xiě)sylar,也是對(duì)sylar豐富與完善
項(xiàng)目地址:https://gitee.com/lzhiqiang1999/server-framework

簡(jiǎn)介

項(xiàng)目介紹:實(shí)現(xiàn)了一個(gè)基于協(xié)程的服務(wù)器框架,支持多線程、多協(xié)程協(xié)同調(diào)度;支持以異步處理的方式提高服務(wù)器性能;封裝了網(wǎng)絡(luò)相關(guān)的模塊,包括socket、http、servlet等,支持快速搭建HTTP服務(wù)器或WebSokcet服務(wù)器。
詳細(xì)內(nèi)容:日志模塊,使用宏實(shí)現(xiàn)流式輸出,支持同步日志與異步日志、自定義日志格式、日志級(jí)別、多日志分離等功能。線程模塊,封裝pthread相關(guān)方法,封裝常用的鎖包括(信號(hào)量,讀寫(xiě)鎖,自旋鎖等)。IO協(xié)程調(diào)度模塊,基于ucontext_t實(shí)現(xiàn)非對(duì)稱協(xié)程模型,以線程池的方式實(shí)現(xiàn)多線程,多協(xié)程協(xié)同調(diào)度,同時(shí)依賴epoll實(shí)現(xiàn)了事件監(jiān)聽(tīng)機(jī)制。定時(shí)器模塊,使用最小堆管理定時(shí)器,配合IO協(xié)程調(diào)度模塊可以完成基于協(xié)程的定時(shí)任務(wù)調(diào)度。hook模塊,將同步的系統(tǒng)調(diào)用封裝成異步操作(accept, recv, send等),配合IO協(xié)程調(diào)度能夠極大的提升服務(wù)器性能。Http模塊,封裝了sokcet常用方法,支持http協(xié)議解析,客戶端實(shí)現(xiàn)連接池發(fā)送請(qǐng)求,服務(wù)器端實(shí)現(xiàn)servlet模式處理客戶端請(qǐng)求,支持單Reator多線程,多Reator多線程模式的服務(wù)器。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-434564.html

環(huán)境變量模塊

  • 提供程序運(yùn)行時(shí)的環(huán)境變量管理功能。這里的環(huán)境變量不僅包括系統(tǒng)環(huán)境變量,還包括程序自定義環(huán)境變量,命令行參數(shù),幫助選項(xiàng)與描述,以及程序運(yùn)行路徑相關(guān)的信息。

1. 主要功能

  • 解析命令行參數(shù),并提供參數(shù)的幫助描述
  • 獲取系統(tǒng)環(huán)境變量
  • 獲取當(dāng)前程序運(yùn)行的絕對(duì)路徑,工作路徑及配置文件的路徑

2. 功能演示

int main(int argc, char** argv)
{
    johnsonli::EnvMgr::GetInstance()->addHelp("d", "run in daemon");
    johnsonli::EnvMgr::GetInstance()->addHelp("p", "print help");
    johnsonli::EnvMgr::GetInstance()->addHelp("s", "start in terminal");
    if(!johnsonli::EnvMgr::GetInstance()->init(argc, argv))
    {
        johnsonli::EnvMgr::GetInstance()->printHelp();
        return 0;
    }

    LOG_INFO(g_logger) << "exe: " << johnsonli::EnvMgr::GetInstance()->getExe();
    LOG_INFO(g_logger) << "cwd: " << johnsonli::EnvMgr::GetInstance()->getCwd();
    LOG_INFO(g_logger) << "path: " << johnsonli::EnvMgr::GetInstance()->getEnv("PATH", "XXX");


    if(johnsonli::EnvMgr::GetInstance()->has("p"))
    {
        johnsonli::EnvMgr::GetInstance()->printHelp();
    }

    return 0;

}

3. 模塊介紹

3.1 Env

  • 處理當(dāng)前命令行參數(shù),系統(tǒng)環(huán)境變量,路徑等問(wèn)題。是一個(gè)單例模式
class Env
{
public:
    typedef RWMutex RWMutexType;
    bool init(int argc, char** argv);

    void add(const std::string& key, const std::string& val);
    bool has(const std::string& key);
    void del(const std::string& key);
    std::string get(const std::string& key, const std::string& default_value = "");

    void addHelp(const std::string& key, const std::string& desc);
    void removeHelp(const std::string& key);
    void printHelp();

    const std::string& getExe() const { return m_exe;}
    const std::string& getCwd() const { return m_cwd;}

    bool setEnv(const std::string& key, const std::string& val);
    std::string getEnv(const std::string& key, const std::string& default_value = "");

    std::string getAbsolutePath(const std::string& path) const;
    std::string getAbsoluteWorkPath(const std::string& path) const;
    std::string getConfigPath();

private:
    RWMutexType m_mutex;
    std::map<std::string, std::string> m_args;
    std::vector<std::pair<std::string, std::string> > m_helps;

    std::string m_program;  // 啟動(dòng)程序的名稱
    std::string m_exe;      // 程序執(zhí)行的絕對(duì)路徑
    std::string m_cwd;      // 絕對(duì)路徑的上一級(jí)路徑
};

typedef johnsonli::Singleton<Env> EnvMgr;
  • 解析命令行參數(shù)。雙指針的思路。調(diào)用readlink()系統(tǒng)調(diào)用,可以獲取/proc/$pid/exe軟鏈接文件指向的路徑,該路徑就是當(dāng)前文件執(zhí)行的絕對(duì)路徑。
std::map<std::string, std::string> m_args; // 存環(huán)境變量參數(shù)
// 初始化,解析
bool init(int argc, char** argv);
// 添加到m_args
void add(const std::string& key, const std::string& val);
// 判斷m_args有無(wú)該參數(shù)
bool has(const std::string& key);
// 刪除
void del(const std::string& key);
// 獲取
std::string get(const std::string& key, const std::string& default_value = "");
  • 獲取/設(shè)置系統(tǒng)環(huán)境變量。主要使用getenv()setenv()兩個(gè)系統(tǒng)調(diào)用
// 設(shè)置系統(tǒng)環(huán)境變量
bool Env::setEnv(const std::string& key, const std::string& val) 
{
    return !setenv(key.c_str(), val.c_str(), 1);
}

// 獲取系統(tǒng)環(huán)境變量
std::string Env::getEnv(const std::string& key, const std::string& default_value) 
{
    const char* v = getenv(key.c_str());
    if(v == nullptr) 
    {
        return default_value;
    }
    return v;
}
  • 設(shè)置命令行參數(shù)幫助信息
std::vector<std::pair<std::string, std::string> > m_helps;	// 存幫助信息
void addHelp(const std::string& key, const std::string& desc);
void removeHelp(const std::string& key);
void printHelp();
  • getAbsolutePath方法,傳入一個(gè)相對(duì)于執(zhí)行文件的路徑,返回這個(gè)路徑的絕對(duì)路徑。比如默認(rèn)的配置文件路徑就是通過(guò)getAbsolutePath(get(“c”, “conf”))來(lái)獲取的,也就是配置文件夾默認(rèn)在執(zhí)行文件所在目錄的conf文件夾。
std::string Env::getAbsolutePath(const std::string& path) const 
{
    if(path.empty())
    {
        return "/";
    }
    if(path[0] == '/')
    {
        return path;
    }
    return m_cwd + path;
}

std::string Env::getAbsoluteWorkPath(const std::string& path) const {
    if(path.empty()) {
        return "/";
    }
    if(path[0] == '/') {
        return path;
    }
    static johnsonli::ConfigVar<std::string>::ptr g_server_work_path =
        johnsonli::Config::Lookup<std::string>("server.work_path");
    return g_server_work_path->getValue() + "/" + path;
}

std::string Env::getConfigPath() 
{
    return getAbsolutePath(get("c", "conf"));
}

到了這里,關(guān)于從零開(kāi)始實(shí)現(xiàn)一個(gè)C++高性能服務(wù)器框架----環(huán)境變量模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++高性能服務(wù)器網(wǎng)絡(luò)框架設(shè)計(jì)與實(shí)現(xiàn)

    C++高性能服務(wù)器網(wǎng)絡(luò)框架設(shè)計(jì)與實(shí)現(xiàn)

    這篇文章將從兩個(gè)方面來(lái)介紹,一個(gè)是服務(wù)器中的基礎(chǔ)的網(wǎng)絡(luò)通信部件;另外一個(gè)是,如何利用這些基礎(chǔ)通信部件整合成一個(gè)完整的高效的服務(wù)器框架。注意:本文以下內(nèi)容中的客戶端是相對(duì)概念,指的是連接到當(dāng)前討論的服務(wù)程序的終端,所以這里的客戶端既可能是我們傳

    2024年02月04日
    瀏覽(22)
  • c++代碼實(shí)現(xiàn)一個(gè)高性能內(nèi)存池(超詳細(xì)版本)

    c++代碼實(shí)現(xiàn)一個(gè)高性能內(nèi)存池(超詳細(xì)版本)

    寫(xiě)在前面 本文的內(nèi)存池代碼是改編自Nginx的內(nèi)存池源碼,思路幾乎一樣。由于Nginx源碼的變量命名我不喜歡,又沒(méi)有注釋,看得我很難受。想自己寫(xiě)一版容易理解的代碼。這應(yīng)該是全網(wǎng)獨(dú)一份的超詳細(xì)版本了(笑~). 應(yīng)用場(chǎng)景 寫(xiě)內(nèi)存池的原理之前,按照慣例先說(shuō)內(nèi)存池的應(yīng)用

    2024年02月06日
    瀏覽(33)
  • 云原生 | 從零開(kāi)始,Minio 高性能分布式對(duì)象存儲(chǔ)快速入手指南

    云原生 | 從零開(kāi)始,Minio 高性能分布式對(duì)象存儲(chǔ)快速入手指南

    [ 點(diǎn)擊 ?? 關(guān)注「 全棧工程師修煉指南」公眾號(hào) ] 希望各位看友多多支持【關(guān)注、點(diǎn)贊、評(píng)論、收藏、投幣】,助力每一個(gè)夢(mèng)想。 【 WeiyiGeek Blog\\\'s - 花開(kāi)堪折直須折,莫待無(wú)花空折枝 ?】 作者主頁(yè): 【?https://weiyigeek.top 】 博客地址: 【?https://blog.weiyigeek.top?】 作者答疑學(xué)習(xí)交

    2024年02月08日
    瀏覽(31)
  • 一、C++項(xiàng)目:仿muduo庫(kù)實(shí)現(xiàn)高性能高并發(fā)服務(wù)器

    一、C++項(xiàng)目:仿muduo庫(kù)實(shí)現(xiàn)高性能高并發(fā)服務(wù)器

    仿mudou庫(kù)one thread oneloop式并發(fā)服務(wù)器實(shí)現(xiàn) 仿muduo庫(kù)One Thread One Loop式主從Reactor模型實(shí)現(xiàn)高并發(fā)服務(wù)器: 通過(guò)實(shí)現(xiàn)的高并發(fā)服務(wù)器組件,可以簡(jiǎn)潔快速的完成一個(gè)高性能的服務(wù)器搭建。并且,通過(guò)組件內(nèi)提供的不同應(yīng)用層協(xié)議支持,也可以快速完成一個(gè)高性能應(yīng)用服務(wù)器的搭建

    2024年02月07日
    瀏覽(34)
  • Nginx - ?一個(gè)高性能、靈活可靠的開(kāi)源Web服務(wù)器

    Nginx - ?一個(gè)高性能、靈活可靠的開(kāi)源Web服務(wù)器

    Nginx是什么? ??Nginx是一個(gè) 高性能的HTTP和反向代理web服務(wù)器 ,同時(shí)也提供了IMAP/POP3/SMTP服務(wù)。Nginx是由伊戈?duì)枴べ愃饕驗(yàn)槎砹_斯訪問(wèn)量第二的Rambler.ru站點(diǎn)(俄文:Рамблер)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日。2011年6月1日,nginx 1.0.4發(fā)布。 ??特點(diǎn)是 占有

    2024年02月07日
    瀏覽(29)
  • [AIGC] Nginx:一個(gè)高性能的 Web 服務(wù)器和反向代理

    Nginx(engine x)是一個(gè)高性能的 Web 服務(wù)器和反向代理,它由 Igor Sysoev 于 2002 年開(kāi)發(fā),并于 2004 年首次發(fā)布為開(kāi)源軟件。Nginx 是當(dāng)今最受歡迎的 Web 服務(wù)器之一,它在互聯(lián)網(wǎng)上被廣泛使用,支持 millions 個(gè)網(wǎng)站和應(yīng)用程序。 Nginx 是一個(gè)免費(fèi)、開(kāi)源、高性能的 Web 服務(wù)器和反向代理

    2024年02月20日
    瀏覽(27)
  • c++高性能264/265實(shí)時(shí)h5流媒體服務(wù)器前后端整體解決方案

    c++高性能264/265實(shí)時(shí)h5流媒體服務(wù)器前后端整體解決方案

    c++高性能264/265實(shí)時(shí)h5流媒體服務(wù)器前后端整體解決方案 下圖展示了前端播放效果。 播放1路264視頻流,4路265視頻流 CPU占用率10%(測(cè)試機(jī)器上運(yùn)行著c++服務(wù)端和其他工具程序) GPU0占用率17% 1.1 作者測(cè)試機(jī)器配置 處理器 11th Gen Intel? Core? i7-11800H @ 2.30GHz 2.30 GHz 機(jī)帶 RAM 32.0 GB (31.

    2024年02月12日
    瀏覽(22)
  • cpp-httplib: 輕量級(jí)、高性能的C++ HTTP/HTTPS客戶端和服務(wù)器庫(kù)

    cpp-httplib 是一個(gè)輕量級(jí)且高效的 C++ HTTP/HTTPS 客戶端和服務(wù)器庫(kù)。它由 Hideaki Sone(yhirose)開(kāi)發(fā),并在 MIT 許可下發(fā)布。該項(xiàng)目的主要目標(biāo)是提供一種簡(jiǎn)單易用的方式,在 C++ 應(yīng)用程序中實(shí)現(xiàn) HTTP 和 HTTPS 功能。 項(xiàng)目倉(cāng)庫(kù)地址:https://gitcode.com/yhirose/cpp-httplib cpp-httplib 可用于以下場(chǎng)

    2024年04月09日
    瀏覽(88)
  • 多路轉(zhuǎn)接高性能IO服務(wù)器|select|poll|epoll|模型詳細(xì)實(shí)現(xiàn)

    多路轉(zhuǎn)接高性能IO服務(wù)器|select|poll|epoll|模型詳細(xì)實(shí)現(xiàn)

    那么這里博主先安利一下一些干貨滿滿的專欄啦! Linux專欄 https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014.3001.5482 操作系統(tǒng)專欄 https://blog.csdn.net/yu_cblog/category_12165502.html?spm=1001.2014.3001.5482 手撕數(shù)據(jù)結(jié)構(gòu) https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014.3001.5482 去倉(cāng)庫(kù)獲

    2024年02月15日
    瀏覽(25)
  • Linux C++性能優(yōu)化秘籍:從編譯器到代碼,探究高性能C++程序的實(shí)現(xiàn)之道

    Linux C++性能優(yōu)化秘籍:從編譯器到代碼,探究高性能C++程序的實(shí)現(xiàn)之道

    隨著大數(shù)據(jù)、人工智能等技術(shù)的飛速發(fā)展,程序性能優(yōu)化的重要性愈發(fā)突出。優(yōu)化性能可以降低資源消耗、提高系統(tǒng)響應(yīng)速度,從而在有限的硬件資源下,實(shí)現(xiàn)更高的吞吐量和處理能力。此外,性能優(yōu)化也有助于降低能耗、減少散熱問(wèn)題,延長(zhǎng)硬件使用壽命。 Linux操作系統(tǒng)具

    2023年04月09日
    瀏覽(47)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包