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

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn))

重寫(xiě)Sylar基于協(xié)程的服務(wù)器系列:

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(0、搭建開(kāi)發(fā)環(huán)境以及項(xiàng)目框架 || 下載編譯簡(jiǎn)化版Sylar)

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(1、日志模塊的架構(gòu))

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(2、配置模塊的設(shè)計(jì))

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(3、協(xié)程模塊的設(shè)計(jì))

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(4、協(xié)程調(diào)度模塊的設(shè)計(jì))

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(5、IO協(xié)程調(diào)度模塊的設(shè)計(jì))

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(6、HOOK模塊的設(shè)計(jì))

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn))

TcpServer模塊架構(gòu)圖

將基于線程的主從Reactor模型進(jìn)行協(xié)程的定制化修改,如圖所示。

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn)),重寫(xiě)Sylar基于協(xié)程服務(wù)器,服務(wù)器,開(kāi)源,c++,后端,架構(gòu),sylar,網(wǎng)絡(luò)編程

TcpServer實(shí)現(xiàn)

TcpServer類(lèi)是一個(gè)服務(wù)器通用類(lèi),TcpServer類(lèi)的實(shí)現(xiàn)是Server端專(zhuān)門(mén)用來(lái)管理Tcp連接的,主要的成員函數(shù)及作用如下:

  1. 構(gòu)造函數(shù),用戶在構(gòu)造一個(gè)TcpServer時(shí)會(huì)傳三個(gè)類(lèi)型都為IOManager的參數(shù),參數(shù)名以功能命名,分別是:worker、io_worker、accept_worker。

  2. bind函數(shù),因?yàn)橐慌_(tái)服務(wù)器有可能有多個(gè)<ip,端口>對(duì),所以用戶在調(diào)用bind函數(shù)時(shí),可能會(huì)傳入多個(gè)地址對(duì),bind函數(shù)就是負(fù)責(zé)為這些ip地址創(chuàng)建套接字,并且將ip地址和固定端口綁定,開(kāi)始監(jiān)聽(tīng)這些套接字。

  3. start函數(shù),創(chuàng)建accept協(xié)程,并將accept協(xié)程放到accept_worker協(xié)程調(diào)度器里面去,accept協(xié)程實(shí)際上就是回調(diào)函數(shù)是TcpServer::startAccept的協(xié)程。

    start函數(shù)的偽代碼:

    重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn)),重寫(xiě)Sylar基于協(xié)程服務(wù)器,服務(wù)器,開(kāi)源,c++,后端,架構(gòu),sylar,網(wǎng)絡(luò)編程

  4. startAccept函數(shù),是一個(gè)接受客戶端連接的回調(diào)函數(shù),內(nèi)部是一個(gè)調(diào)用accept函數(shù)的死循環(huán),在接受到一個(gè)socketfd后,將套接字封裝成IO協(xié)程,并放入io_worker協(xié)程調(diào)度器中進(jìn)行調(diào)度。IO協(xié)程就是回調(diào)函數(shù)是TcpServer::handleClient函數(shù)的協(xié)程。

    startAccept函數(shù)的偽代碼:

    重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn)),重寫(xiě)Sylar基于協(xié)程服務(wù)器,服務(wù)器,開(kāi)源,c++,后端,架構(gòu),sylar,網(wǎng)絡(luò)編程

  5. handleClient函數(shù),該函數(shù)是一個(gè)虛函數(shù),是專(zhuān)門(mén)用來(lái)和客戶請(qǐng)求對(duì)接的協(xié)程,在TcpServer中是一個(gè)簡(jiǎn)單打印連接信息的虛函數(shù),想要實(shí)現(xiàn)一個(gè)實(shí)用的服務(wù)器(如HTTP服務(wù)器、FTP服務(wù)器等)只需要對(duì)handleClient函數(shù)做定制化重寫(xiě)即可。

    handleClient函數(shù)偽代碼:

    重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn)),重寫(xiě)Sylar基于協(xié)程服務(wù)器,服務(wù)器,開(kāi)源,c++,后端,架構(gòu),sylar,網(wǎng)絡(luò)編程

HTTP服務(wù)器的實(shí)現(xiàn)

HttpServer類(lèi)繼承TcpServer類(lèi)并重寫(xiě)TcpServer::handleClient函數(shù)。
HttpServer類(lèi)重寫(xiě)了handleClient函數(shù),內(nèi)部實(shí)現(xiàn)為不斷調(diào)用recvRequest函數(shù)的死循環(huán),recvRequest函數(shù)底層會(huì)調(diào)用read函數(shù)讀取并解析客戶請(qǐng)求。在調(diào)用revcRequest函數(shù)后會(huì)將解析的請(qǐng)求提交給Servlet類(lèi)處理請(qǐng)求,Servlet層會(huì)返回回復(fù)報(bào)文,然后利用sendResponse函數(shù),將回復(fù)報(bào)文發(fā)送回客戶端。sendResponse函數(shù)底層調(diào)用write函數(shù)。

handleClient函數(shù)重寫(xiě)如下:

重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xiàn)),重寫(xiě)Sylar基于協(xié)程服務(wù)器,服務(wù)器,開(kāi)源,c++,后端,架構(gòu),sylar,網(wǎng)絡(luò)編程

感興趣的同學(xué),可以閱讀一下本文實(shí)現(xiàn)的源碼:https://github.com/LunarStore/lunar

于此Sylar基礎(chǔ)模塊設(shè)計(jì)的講解完結(jié)。

除了基于協(xié)程的服務(wù)器外,推薦讀者也可以去看一下Muduo基于線程的網(wǎng)絡(luò)庫(kù)的設(shè)計(jì)。兩者對(duì)比著學(xué)習(xí)才能有更好的理解。sylar相對(duì)于Muduo來(lái)說(shuō),性能確實(shí)沒(méi)那么高,但是sylar設(shè)計(jì)的初衷是奔著框架去的,所以sylar基礎(chǔ)設(shè)施做的特別好,比如有Muduo沒(méi)有的配置模塊、動(dòng)態(tài)庫(kù)模塊、daemon模塊等,sylar另一大優(yōu)勢(shì)是對(duì)網(wǎng)絡(luò)編程友好,可以以同步的方式進(jìn)程網(wǎng)絡(luò)業(yè)務(wù)的編寫(xiě),同時(shí)享受異步的性能。而深入閱讀Muduo其實(shí)就可以發(fā)現(xiàn)Muduo網(wǎng)絡(luò)庫(kù)One Loop Per Thread的思想,和Nginx的One Loop Per Process有神奇的相似之處,這種模型,靠著每個(gè)線程都有自己的loop和任務(wù)隊(duì)列,將需要跨線程執(zhí)行的任務(wù)添加到各自的隊(duì)列中去串行執(zhí)行,加鎖的臨界區(qū)會(huì)很小,幾乎不需要鎖。所以Muduo性能很高。

Muduo源碼筆記系列:

muduo源碼閱讀筆記(0、下載編譯muduo)

muduo源碼閱讀筆記(1、同步日志)

muduo源碼閱讀筆記(2、對(duì)C語(yǔ)言原生的線程安全以及同步的API的封裝)

muduo源碼閱讀筆記(3、線程和線程池的封裝)

muduo源碼閱讀筆記(4、異步日志)

muduo源碼閱讀筆記(5、Channel和Poller)

muduo源碼閱讀筆記(6、EvevntLoop和Thread)

muduo源碼閱讀筆記(7、EventLoopThreadPool)

muduo源碼閱讀筆記(8、定時(shí)器TimerQueue)

muduo源碼閱讀筆記(9、TcpServer)

muduo源碼閱讀筆記(10、TcpConnection)

muduo源碼閱讀筆記(11、TcpClient)


本章完結(jié)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-832980.html

到了這里,關(guān)于重寫(xiě)Sylar基于協(xié)程的服務(wù)器(7、TcpServer & HttpServer的設(shè)計(jì)與實(shí)現(xià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)文章

  • 重寫(xiě) Nacos 服務(wù)發(fā)現(xiàn):多個(gè)服務(wù)器如何跨命名空間,訪問(wèn)公共服務(wù)?

    重寫(xiě) Nacos 服務(wù)發(fā)現(xiàn):多個(gè)服務(wù)器如何跨命名空間,訪問(wèn)公共服務(wù)?

    在開(kāi)發(fā)某個(gè)公共應(yīng)用時(shí),筆者發(fā)現(xiàn)該公共應(yīng)用的數(shù)據(jù)是所有測(cè)試環(huán)境(假設(shè)存在 dev/dev2/dev3)通用的。 這就意味著只需部署一個(gè)應(yīng)用,就能滿足所有測(cè)試環(huán)境的需求;也意味著所有測(cè)試環(huán)境都需要調(diào)用該公共應(yīng)用,而不同測(cè)試環(huán)境的應(yīng)用注冊(cè)在不同的 Nacos 命名空間。 如果所

    2024年02月04日
    瀏覽(26)
  • 2310C++協(xié)程超傳服務(wù)器

    原文 告別 異步 回調(diào)模型,寫(xiě)代碼更簡(jiǎn)單.同樣也是跨平臺(tái), 僅頭文件 的,包含頭文件即可用,來(lái)看看它的用法. 提供 getpost 服務(wù) coro_http_server 提供了三個(gè) http 服務(wù),通過(guò) set_http_handler 注冊(cè)的,注冊(cè)了兩個(gè) http 處理函數(shù):一個(gè)是 普通 函數(shù),一個(gè)是 協(xié)程 函數(shù). 注冊(cè)為 普通函數(shù) 時(shí),會(huì)在 i

    2024年02月06日
    瀏覽(14)
  • 一、重寫(xiě)muduo網(wǎng)絡(luò)庫(kù)之服務(wù)器編程及測(cè)試

    一、重寫(xiě)muduo網(wǎng)絡(luò)庫(kù)之服務(wù)器編程及測(cè)試

    目錄 一、基于muduo網(wǎng)絡(luò)庫(kù)開(kāi)發(fā)服務(wù)器程序的基本步驟 1、組合TcpServer對(duì)象 2、創(chuàng)建EventLoop事件循環(huán)對(duì)象的指針 3、明確TCPServer構(gòu)造函數(shù)需要的參數(shù),輸出ChatServer的構(gòu)造函數(shù) 4、在當(dāng)前服務(wù)器類(lèi)的構(gòu)造函數(shù)當(dāng)中,注冊(cè)處理連接的回調(diào)函數(shù)和處理讀寫(xiě)事件的回調(diào)函數(shù) 5、設(shè)置合適的

    2024年02月04日
    瀏覽(15)
  • 使用Swoole協(xié)程實(shí)現(xiàn) WebRTC 信令服務(wù)器

    使用Swoole協(xié)程實(shí)現(xiàn) WebRTC 信令服務(wù)器

    一、 什么是WebRTC WebRTC技術(shù)是激烈的開(kāi)放的Web戰(zhàn)爭(zhēng)中一大突破-Brendan Eich, inventor of JavaScript。 簡(jiǎn)單來(lái)說(shuō),WebRTC 是一個(gè)音視頻處理+及時(shí)通訊的開(kāi)源庫(kù)。在實(shí)時(shí)通信中,音視頻的采集和處理是一個(gè)很復(fù)雜的過(guò)程。比如音視頻流的編解碼、降噪和回聲消除等。由Google發(fā)起開(kāi)源,其中

    2024年03月26日
    瀏覽(23)
  • Go重寫(xiě)Redis中間件 - GO實(shí)現(xiàn)TCP服務(wù)器

    首先新建一個(gè)項(xiàng)目go-redis,將config和lib包放到項(xiàng)目中,config.go用來(lái)解析配置,比如端口、功能、DB數(shù);lib包有兩個(gè)文件夾,分別是logger和sync,其中l(wèi)ogger.go是一個(gè)日志框架,sync包中的bool.go包裝了atomic操作,因?yàn)閍tomic原生沒(méi)有bool類(lèi)型,所以將uint32類(lèi)型改造成bool型的atomic,wait.g

    2024年02月15日
    瀏覽(23)
  • Unity 的協(xié)程的原理

    Unity是一款非常強(qiáng)大的游戲引擎,它支持多種編程語(yǔ)言,其中最常用的語(yǔ)言是C#。在Unity中,協(xié)程是一種非常強(qiáng)大的功能,它可以讓我們?cè)谟螒蛑袑?shí)現(xiàn)各種各樣的效果。本文將詳細(xì)介紹Unity協(xié)程的原理,并給出示例代碼詳解。 對(duì)啦!這里有個(gè)游戲開(kāi)發(fā)交流小組里面聚集了一幫熱

    2024年02月02日
    瀏覽(36)
  • golang 協(xié)程的實(shí)現(xiàn)原理

    golang 協(xié)程的實(shí)現(xiàn)原理

    要理解協(xié)程的實(shí)現(xiàn), 首先需要了解go中的三個(gè)非常重要的概念, 它們分別是 G ,? M 和 P , 沒(méi)有看過(guò)golang源代碼的可能會(huì)對(duì)它們感到陌生, 這三項(xiàng)是協(xié)程最主要的組成部分, 它們?cè)趃olang的源代碼中無(wú)處不在. G (goroutine) G是goroutine的頭文字, goroutine可以解釋為受管理的輕量線程, gorout

    2024年02月10日
    瀏覽(20)
  • 【Kotlin】協(xié)程的字節(jié)碼原理

    【Kotlin】協(xié)程的字節(jié)碼原理

    前言 協(xié)程是Koltin語(yǔ)言最重要的特性之一,也是最難理解的特性。網(wǎng)上關(guān)于kotlin協(xié)程的描述也是五花八門(mén),有人說(shuō)它是輕量級(jí)線程,有人說(shuō)它是無(wú)阻塞式掛起,有人說(shuō)它是一個(gè)異步框架等等,眾說(shuō)紛蕓。甚至還有人出了書(shū)籍專(zhuān)門(mén)介紹kotlin協(xié)程。 筆者剛開(kāi)始接觸這個(gè)概念也是一

    2024年01月18日
    瀏覽(17)
  • [Kotlin Tutorials 21] 協(xié)程的取消

    [Kotlin Tutorials 21] 協(xié)程的取消

    本文討論協(xié)程的取消, 以及實(shí)現(xiàn)時(shí)可能會(huì)碰到的幾個(gè)問(wèn)題. 本文屬于合輯: https://github.com/mengdd/KotlinTutorials 取消的意義: 避免資源浪費(fèi), 以及多余操作帶來(lái)的問(wèn)題. 基本特性: cancel scope的時(shí)候會(huì)cancel其中的所有child coroutines. 一旦取消一個(gè)scope, 你將不能再在其中l(wèi)aunch新的coroutine. 一

    2024年02月08日
    瀏覽(14)
  • Kotlin協(xié)程的JVM實(shí)現(xiàn)源碼分析(下)

    Kotlin協(xié)程的JVM實(shí)現(xiàn)源碼分析(下)

    協(xié)程 根據(jù) 是否保存切換 調(diào)用棧 ,分為: 有棧協(xié)程(stackful coroutine) 無(wú)棧協(xié)程(stackless coroutine) 在代碼上的區(qū)別是:是否可在普通函數(shù)里調(diào)用,并暫停其執(zhí)行。 Kotlin協(xié)程,必須在掛起函數(shù)中調(diào)用和恢復(fù),屬于 無(wú)棧協(xié)程 。 常見(jiàn)的語(yǔ)言,協(xié)程實(shí)現(xiàn): 有棧協(xié)程 :Go、Lua 無(wú)棧

    2024年01月23日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包