INDY UDP 原始碼分析

2022-02-19 04:24:11 字數 1443 閱讀 3515

idudpserve

-----------------

tidbasecomponent // 主要儲存版本號資訊

tidcomponent(建立乙個純虛類tidstack物件, 獲取本機機器名), 另外操作乙個結構體work陣列

tidudpbase

tidudpserver 建立乙個tidsockethandles物件,主要是由使用者輸入ip,埠號.

裡邊的主要是乙個讀資料報操作,onudpread屬性, packetreceived doudpread

tidudpbase 裡active為true時,呼叫getbinding過程,因為其為虛函式,呼叫派生類的, 該過程創造乙個tidudplistenerthread執行緒物件,將自身當引數傳遞過去.

tidbasethread(基類執行緒類)  從vcl執行緒類tthread繼承, 裡邊沒什麼東西,就倆個同步函式

tidthread 純虛類

procedure tidthread.execute;

如果沒有選擇停止,一直在呼叫派生類的tidudplistenerthread.run

tidudplistenerthread (派生執行緒類)

主要是 procedure tidudplistenerthread.run函式

建立了乙個freadlist物件,freadlist.capacity := fserver.bindings.count,涉及vcl中的tlist類,  估計主要是一次將記憶體分配好,避免記憶體碎片

然後遍歷list, 感覺這麼寫,如果client多的時候,這遍歷效率低了點

if fserver.threadedevent then  // 選擇是否同步執行udpread

begin

udpread;

endelse

begin

synchronize(udpread);

end;

procedure tidudplistenerthread.udpread;

begin

fserver.packetreceived(fbuffer, incomingdata); // doudpread ,判斷tidudpserver 的read事件屬性, 就是外部idudpser的onread事件

end;

------------

tidbasecomponent

tidcomponent

tidudpbase  核心類 , (涉及 tidsockethandle, 涉及tcollection),封裝socket的 bind listen  connect accept等操作 ) 主要為socket接收 傳送

tidudpclient 比較簡單,就倆函式send和sendbuffer 最終都是轉換成 tidsockethandle類的 sendto函式

client發包過來,serve裡建立乙個執行緒,不停地接收

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...