原创 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 ,一般情況下,在自己的項目中使用時