ET伺服器框架學習筆記(十五)

2021-10-10 19:43:22 字數 2081 閱讀 5819

三、locationcomponent

四、locationproxycomponent

總結前面好幾篇都是關於通訊協議的,本篇將對上篇說的actor鎖來個梳理,避免自己以後懵逼。

//協程鎖元件

game.scene.

addcomponent

<

coroutinelockcomponent

>()

;// location server需要的元件

game.scene.

addcomponent

<

locationcomponent

>()

;// 訪問location server的元件

game.scene.

addcomponent

<

locationproxycomponent

>()

;

協程鎖類,內部有乙個key,對應乙個實體id對應乙個coroutinelock鎖,觀點在於dispose時,會呼叫coroutinelockcomponent.instance.notify(this.key);通知coroutinelockcomponent元件這個協程被釋放掉是資訊。

內部包含乙個佇列,型別為ettaskcompletionsource,即乙個非同步tcs存入這個佇列中,同時這個tcs關聯乙個協程coroutinelock鎖。

包含乙個單例,用於其他類直接呼叫。

鎖定資訊類,內部包含乙個鎖定的實體的lockinstanceid,乙個coroutinelock鎖。

這個元件一般是出了location服務外的內網服務會掛載,內部封裝了對定位服務的增加,刪除,鎖定,解鎖等操作。實際就是給location服務傳送協議。

1.awake:主要任務就是初始化location服務位址

2.add:傳送一條objectaddrequest到location服務

3.lock:傳送一條objectlockrequest到location服務

4.unlock:傳送一條objectunlockrequest到location服務

5.remove:傳送一條objectremoverequest到location服務

6.get:傳送一條objectgetrequest到location服務。

上面分別對應了下面的例項處理方法:

objectaddrequesthandler,

objectlockrequesthandler,

objectunlockrequesthandler,

objectremoverequesthandler,

objectgetrequesthandler

對應是呼叫locationcomponent的各個方法。

注意:

et在很多地方都呼叫了型別下面的**:

using

(await coroutinelockcomponent.instance.

wait

(key +

(int

){}

這裡的using,有個特別之處,在於當結束{}時,會自動呼叫()內部類的dispose方法。因此當沒有鎖定時,wait函式返回乙個 return componentfactory.create(key);,乙個coroutinelock例項。然後結束using時會自動呼叫coroutinelock的dispose方法,從而呼叫到coroutinelockcomponent.instance.notify(this.key);從而將鎖給移除了。

這樣的話,對於多個鎖定,都會進入到鎖定佇列中。而對於其他用法,重複呼叫時,由於using語法,結束乙個,立馬就會銷毀乙個,等於是只會有乙個鎖定,等待真正的unlock來觸發。

同樣的道理適用於在innermessagedispatcher時,也會使用await coroutinelockcomponent.instance.wait(message.actorid)的方式。所以在後續使用中,需要用到location服務的時候,都應該用這種方式。

大致的原因在etbook中有說,有需要可以去看。

ET伺服器框架學習筆記(五)

二 使用方式總結 檢視原始碼又發現乙個資料結構,用於記錄管理sorteddictionary這種型別的資料,其中可學習的地方在於,有個 與重複使用的list池子,這種以記憶體換效能的方式,在et裡面比較常見。重用list private readonly queue queue newqueue p...

ET框架 服務端 Program學習筆記

在寫服務端之前,我是先看的客戶端 而et框架,服務端和客戶端的 很多都是共用的,這也是et方便的一點。所以,如果你是直接來看服務端的,希望你對客戶端的 已經有了足夠的了解,之前在客戶端講過的 我會一筆帶過。這裡是客戶端 學習筆記的入口。通過landlordscore 學習et框架。非同步方法全部會回...

clamd伺服器 學習筆記

實現病毒掃瞄功能的後台程序,它使用socket通訊 訊號同步 執行緒池 後台程序等典型技術。標準c庫提供了對命令列引數進行分析的函式 include int getopt int argc,char const argv const char optstring argc和argv 是main函式的...