天天看點

tcpdaemon —— 特定程序模型下的TCP連接配接管理

tcpdaemon 詳細介紹

老師交給小明一個開發任務,實作一個tcp網絡疊代并發伺服器,用于回射任何接收到的通訊資料。小明很懶,他在開源中國項目庫裡搜到了開源庫tcpdaemon來幫助他快速完成任務。首先他安裝好tcpdaemon,然後寫了一個c程式檔案test_callback_echo.c

他編譯連結成動态庫test_callback_echo.so,最後用tcpdaemon直接挂接執行

ok,總共花了五分鐘,圓滿完成老師作業。老師說這個太簡單了,小明你給我改成像apache經典的leader-follow服務端模型,小明說沒問題,他把啟動指令參數<code>-m if</code>改成了<code>-m lf</code>,再次執行,完成老師要求,總共花了五秒鐘。老師問你怎麼這麼快就改好了,小明說全靠開源項目tcpdaemon幫了大忙啊 ^_^

tcpdaemon是一個tcp通訊服務端平台/庫,它封裝了衆多常見服務端程序/線程管理和tcp連接配接管理模型(forking、leader-follow、io-multiplex、windowsthreads leader-follow),使用者隻需加入tcp通訊資料收發和應用邏輯代碼就能快速建構出完整的tcp應用伺服器。

服務模型模型說明

forking : 單程序主守護,每當一條tcp新連接配接進來後,接受之,建立子程序進入回調函數tcpmain處理之。一條連接配接對應一個子程序(短生命周期)

leader-follow : 單程序管理程序,預先建立一組子程序(長生命周期)并監控其異常重新開機。子程序等待循環争搶tcp新連接配接調用回調函數tcpmain處理之

io-multiplex : 單程序主守護,io多路複用等待tcp新連接配接進來事件、tcp資料到來事件,tcp資料可寫事件,調用回調函數tcpmain處理之

windowsthreads leader-follow : 同leader-follow,差別在于預先建立一組子線程而非子程序

tcpdaemon提供了三種與使用者代碼對接方式:(注意:.exe隻是為了說明自己是可執行檔案,在unix/linux中可執行檔案一般沒有擴充名)

回調模式 : tcpdaemon.exe+user.so(tcpmain) | 可執行程式tcpdaemon通過啟動指令行參數挂接使用者動态庫,獲得動态庫中函數tcpmain指針。當建立tcp連接配接後 或 io多路複用模式下當可讀可寫事件發生時 調用回調函數tcpmain

主調模式 : user.exe(main,tcpmain)+libtcpdaemon.a(tcpdaemon) | 使用者可執行程式user.exe隐式連結庫libtcpdaemon.a。使用者函數main(user.exe)初始化tcpdaemon參數結構體,并設定回調函數tcpmain,調用函數tcpdaemon(libtcpdaemon.so)。當建立tcp連接配接後 或 io多路複用模式下當可讀可寫事件發生時 調用回調函數tcpmain

主調+回調模式 : user.exe(main)+libtcpdaemon.a(tcpdaemon) + user.so(tcpmain) | 同上,差別在于使用者函數main不直接設定回調函數tcpmain而設定user.so檔案名。函數tcpdaemon負責挂接動态庫user.so并獲得函數tcpmain指針

一般簡單情況下,使用者采用回調模式即可,隻要編寫一個動态庫user.so(内含回調函數tcpmain)被可執行程式tcpdaemon挂接上去運作。如果使用者想訂制一些自定義處理,如初始化環境,可以采用主調模式,實作函數main裡把自定義參數傳遞給tcpdaemon穿透給tcpmain。如果想實作運作時選擇回調函數tcpmain則可以采用主調+回調模式。

繼續閱讀