<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 游戲專題 SD近期為游戲開發者提供了很多助力,在游戲開發上提供了一些便利性組件,下面我們來看看SD是怎么為游戲開發者解決痛點的。 ## 延遲隊列 游戲一般對消息隊列有一定的使用需求,但一般的開源消息隊列并沒有很好的處理延時消息的派發。比如rabbitmq雖然它是可以通過死信隊列來模擬延時隊列但是不僅難用還有很大的限制。 SD提供了一個簡單可靠的延遲消息隊列模塊[TimerCallBack](TimerCallBack.md)。 ``` $token = yield TimerCallBack::addTimer(2,TestModel::class,'testTimerCall',[123]); ``` 簡單的通過下面一段代碼就可以實現延遲2s執行TestModel中的testTimerCall函數。而且沒有任何副作用,即使重啟服務器延時隊列也會很好的完成使命。 ## Actor 本篇文章將重點介紹下Actor,什么是Actor你可以把它當成一個運算單元,用于模擬任何的事與物,Actor存在于內存中分布在不同的進程,或者分布在不同的機器上,Actor間可以互相通訊,Controller,Model甚至Actor自身都可以創建一個Actor,Actor同樣也可以調用Model和Task。 拿棋牌舉例子,你可以為房間創建一個RoomActor,為房間里的每一個人創建一個PlayerActor,RoomActor負責處理一共有多少局,輪到誰出牌了,PlayerActor則可以負責玩家的一系列行為,甚至玩家掉線充當玩家的AI。 利用好Actor可以簡化你游戲的邏輯,使其更加擬人,邏輯表達更加的清晰,使用Actor的哲學就是萬物的交流靠通訊。 1. 創建Actor ``` $name = session_create_id(); Actor::create(TestActor::class, $name); ``` 每一個Actor都必須是不重名的。 2. 與Actor通訊 ``` $rpc = Actor::getRpc("Test2"); try { $beginid = yield $rpc->beginCo(); $result = yield $rpc->test1(); $result = yield $rpc->test2(); //var_dump($result); $result = yield $rpc->test3(); //var_dump($result); } finally { //var_dump("finally end"); $rpc->end(); } ``` 與Actor通訊都是RPC形式,和調用一個函數一樣,支持事務。 3. 銷毀Actor ``` Actor::destroyActor($name);//銷毀某一個Actor Actor::destroyAllActor();//銷毀所有Actor ``` 4. Actor狀態機 Actor具有自動恢復的功能,即使服務器關閉,再次啟動時會自動恢復所有沒有被主動銷毀的Actor,當然記錄這個Actor的前提是該Actor使用了狀態機。 使用setStatus可以創建狀態,創建狀態的時候或者恢復狀態的時候會執行registStatusHandle方法,我們可以在次方法里處理狀態對應的邏輯。 ``` $this->setStatus('status', 1); public function registStatusHandle($key, $value); ``` 5. Actor的定時器 ``` public function tick($ms, $callback, $user_param = null);//定時器 public function after($ms, $callback, $user_param = null);//延時執行 public function clearTimer($id);//清除定時器 ``` Actor銷毀的時候會自動銷毀全部的定時器。 6. Actor集群 在集群環境下Actor同樣可以執行,不同機器的Actor間可以相互通訊,還是要注意的一點就是一定要保證Actor名稱的唯一性,如果創建了2個名稱一樣的Actor,那么這2個Actor均會收到屬于這個名稱的所有消息。 7. 穩定性 SD已驗證了50W個Actor的創建與恢復,創建越多的Actor會消耗越多的內存。 ## 結束語 使用好這些模塊,會加快你的游戲開發進程,SD之后也會推出更多的面向特定行業的優質模塊。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看