原创 tars客戶端(一):一次rpc的調用過程
前言 用tars的客戶端與tars服務端通信非常簡單,因爲框架層已經幫我們隱藏了尋址,協議封裝,通信等細節,我們只需創建一個本地Servant代理,發起一個調用就可以。以官網的HelloServer爲例: //生成客戶端代理 Hello
原创 tars客戶端(二):請求包從主調線程到網絡線程的過程
一.主調線程的線程私有數據 主調線程不是固定的,可以是業務自己創建的線程,或者是服務端的handle線程,甚至是客戶端的網絡線程(調用框架其他節點的rpc接口),爲了能保存rpc調用的上下文,每個主調線程會創建自己的線程私有數據Serva
原创 tars服務端(一):server的啓動流程
前言 tars服務端在框架層幫我們封裝了rpc的實現細節,讓開發人員只需專注於業務層的接口實現。這一篇文章主要分兩個部分來初步瞭解tars服務端: 先從頂層瞭解服務端框架層提供了什麼,不糾結代碼細節 再結合代碼具體的瞭解一個tars se
原创 tars服務端(二):網絡io模型和線程模型
一.網絡io模型 tars服務端的網絡io模型是用epoll(邊緣觸發)做io多路複用 + 非阻塞socket。 如果把線程也納入考量,那麼 有多個網絡線程,每個網絡線程都有自己的epoll實例 多線程與io:很關鍵的一點,每個socke
原创 tars服務端(五):過載保護
前言 除了限制最大鏈接數,tars還會在接收隊列中做過載保護: 接收隊列中的請求包數量 請求包在接收隊列中停留的時間 一.接收隊列插入請求包時 在push請求包時,會先判斷接收隊列當前的狀態: 隊列的容量在Adapter的que
原创 Tars源碼學習
前言 Tars是騰訊開源的高性能,多語言RPC開發框架,同時配套了一體化的服務治理平臺。看源碼是學習和了解Tars的方式之一,Tars的源碼主要分成三部分: RPC:各個語言版本的rpc實現,包括TarsCpp,TarsJava,Tars
原创 tars服務端(四):鏈接管理
前言 這裏的鏈接管理主要關注下面幾個問題: 鏈接_uid生成規則 鏈接刷新和超時踢掉機制 鏈接關閉 一.ConnectionList中的_uid 1.鏈接管理相關的類圖: 每個網絡線程都有一個獨立的鏈接列表ConnectionList
原创 tars服務端(三):收發包管理
前言 網絡編程中,收發包是一個比較重要的過程。這篇文章主要分析記錄tars的收發包步驟(TCP鏈接,tars協議爲例),以及整個過程中對內存的使用。 一.收包 1.收包邏輯 收包的邏輯主要在Connection::recv(recv_qu
原创 win32開發流程
原文地址:http://blog.csdn.net/tcjiaan/article/details/8497535 一、WinMain入口點 我們在學習標準C++的時候,都知道每個應用程序運行時都會先進入
原创 Easylogging++源碼分析
一. 使用開源項目最大的好處就是可以看它的源碼來加深你的理解,理解了其實現原理,則使用起來必定更加得心應手。 下面幾個類是Easylogging中最重要的幾個類,弄明白了這幾個類就能弄懂各項功能的實現:
原创 有限狀態機FSM
前言: 之前的工作中使用有限狀態機模型管理遊戲流程,趁這段工作空窗期總結一下狀態機的相關知識。一.狀態機相關概念: 有限狀態機(Finite State Machine),以下簡稱FSM,是一種描述離散狀態的數學模型
原创 Windows的消息隊列與消息循環
原文地址:http://blog.csdn.net/chaos_epimetheus/article/details/7163540 在Windows操作系統中,窗口是一種User Object,隸屬於創建它的線
原创 Easylogging的封裝使用二
一.對Char類型的處理在Easylogging的封裝使用一:http://blog.csdn.net/woshichenweixian/article/details/77278488 中講到,對char類型的輸出需要進行一些特殊處理,
原创 Easylogging介紹和簡單使用
一.Easylogging簡介:Easyloggingpp是一個C++開源log庫,其在github的地址:https://github.com/muflihun/easyloggingppEasyloggingpp最大的特點是隻需一個頭
原创 Easylogging的封裝使用一
一.封裝的目的和使用範圍在上一篇文章中介紹了Easylogging的簡單使用:http://blog.csdn.net/woshichenweixian/article/details/77018452 ,一般情況下,在自己的項目中使用時