[討論] 分散式運算的Action,我的解決方案[Sumtec]

來源:互聯網
上載者:User
先來看看順序圖表:

看之前先看看一些補充說明,左邊是Tank所在的機子,右邊是Building所在的機子。前面兩個ReceiveData調用缺少了SendData調用,另外有一些地方實際上是非同步作業,例如某些ReceiveData,為了畫圖簡便,我都用掉用來表示了。希望大家看這個圖的時候,對照一下最新版本的代碼來看。


在最新版本的代碼裡面,Action添加了8個(2*2對)虛函數。分別是GetXXInfo/SetXXInfo和GetXXResult/SetXXResult,XX是Subject和Target(主語和賓語)。簡單一點講,在Action.OnAction計算之前,可能首先需要知道雙方的一些具體資料,這個時候就會向Subject和Target的擁有者發送資訊,要求給出這些計算所需要的資料。擁有者收到訊息則在本地產生同樣的Action對象,調用SetXXInfo,然後本地的Engine就會將設定好的資訊發送出去。Action所在機器收到訊息之後,Engine就會調用Action.GetXXInfo來更新本機物件的副本。可以看到,這裡僅僅擷取和更新副本的非常少的資訊,這個資訊是某一個Action在進行OnAction計算所必需的資訊,其他資訊部通過這裡進行更新,以減少計算量和通訊量。OnAction之後,按道理就會對賓語,甚至是主語的某些資料進行更新。我假設一個比更複雜的動作,例如Heal治療,那麼HealAction.OnAction就應該減少Subject的MP並增加Target的HP。這個時候OnAction就應該調用本地的SetXXResult來發布相應的結果資訊,原始對象擁有者在收到資訊的時候,Engine就調用HealAction.GetXXResult來更新本機物件的相應資訊。

現在應該明白,我的設計裡面有三個要素,Subject、Action、Target。這三個要素在這個設計裡面不需要在同一台機子上面,但是在同一台機子上面也是可以的。如果Subject、Action、Target都在同一台機器上,那就是單機版。如果Subject、Target在不同的機器上,Action在這兩台機器的其中一台,那麼就是1vs1的對戰遊戲。如果Subject、Target在不同的機器上,Action可能在也可能不在同一台機器上,那就是SC的LanGame模式。如果Subject、Target、Action可以在任意的機子上面,並且沒有任何關係上面的約束,那就是我所說的終極目標——分布計算模式了。可以看到這個設計理論上應該能夠適應好幾種不同的模式,並且這個不需要改變Action和Character的設計,Action和Character也只需要一個版本,不需要分裂成client版和server版,這樣在開發上面來說,難度應當比較小一點。使用什麼模式,大概只需要在引擎裡面進行一些設定就可以了。

需要注意到一個問題是這裡還沒有仔細考慮清楚的,就是同步互斥問題。dudu提出了同步互斥問題,舉了兩個例子:一個是一群的Tank對一個Building發動攻擊的情況,另外一個是兩個Tank互相攻擊的情況。對於前一個情況我認為不是一個問題,至少不需要把對象鎖定來達到同步的目的。我們只需要在ResultData裡面傳送delta值,比如HP減少了12,那麼在Building進行更新資料的時候一旦發現HP<0,那就立刻“爆炸”同時進入“廢物”狀態,這個時候在減小HP也不會體現出來。其實在SC或者C&C裡面經常會見到這麼一個情形:A對Building發送了一顆炮彈,炮彈到達Building的時候HP就小於0了。但是在炮彈發射之後到達之前一瞬間,Building的HP還是大於0的,這個時候其他的Tank也對他發動攻擊。當其他Tank的炮彈到達的時候,Building已經掛了,但是遊戲還是沒有任何影響,我們也不覺得奇怪。所以對於這種情形來說,我們不需要鎖定對象來達到同步的目的的。但是對於第二種情況,我目前還沒有思考清楚,也許會有一些什麼問題存在,大家覺得呢?

希望大家看完之後,能夠有點什麼建議,這樣我們才能更上一層樓。謝謝。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.