1. 程式人生 > >企業級開發框架EasySwoole 3.0.10釋出啦,全協程Actor模式支援,助力遊戲物聯網行業

企業級開發框架EasySwoole 3.0.10釋出啦,全協程Actor模式支援,助力遊戲物聯網行業

  

    EasySwoole 是一款基於Swoole4.x開發的全協程、常駐記憶體型的分散式框架,專為API而生,友好地支援HTTP、WEB_SOCKET、TCP、UDP多協議混合共存,適合於構建高效的API服務。

    此次EasySwoole 3.0.10版本的釋出,為大家帶來了全新的協程Actor程式設計模式支援,從而實現程式設計的高度抽象化,例如,把一個用或者是一個遊戲房間都抽象為一個Actor,每個Actor又支援獨立的定時器管理,定時器的生命週期與Actor自身一致,從而解決智慧硬體的線上監測或是卡牌遊戲中發牌時間監測的問題。而EasySwoole的Actor在底層上,不同程序間採用unixsock進行通訊,同進程內採用 swoole channle 作為mail box,從而實現高效的資訊收發,在阿里雲1核2G的標準機器上,可以實現每秒百萬級的Actor間通訊互動。我們以實現一個房間的Actor作為例子: 

    RoomActor 定義:  

namespace App;


use EasySwoole\EasySwoole\Actor\AbstractActor;

class Room extends AbstractActor
{
    /*
    當一個actor退出的時候,會執行的回撥
    如果是客戶端單獨傳送exit命令給某個actor的時候,你可以return 一個可以被序列化的變數,返回給客戶端
    若是客戶端執行exitAll命令時,則無法接收該訊息(等待全部的代價過大)
    */
    function onExit()
    {
        // TODO: Implement onExit() method.
        var_dump($this->actorId().' exit ');
    }

    /*
    當你的客戶端向某個actor推送訊息的時候
    */
    function onMessage($arg)
    {
        // TODO: Implement onCommand() method.
        var_dump($arg);
        return $this->actorId().' msg at '.time();
    }
    /*
       當該Actor被建立的時候
    */
    function onStart()
    {
        // TODO: Implement onStart() method.
        var_dump($this->actorId().' start ');
        $this->tick(1000,function (){
           var_dump('time tick for'.$this->actorId());
        });
    }
}

    進行Actor程序註冊:

use App\Room;
use EasySwoole\EasySwoole\Actor\ActorManager;

ActorManager::getInstance()->register(Room::class)
->setActorProcessNum(3)//設定儲存actor的程序數目
->setActorName('RoomActor')//設定Actor的名稱,注意一定要註冊,且不能重複
->setMaxActorNum(1000);//設定當前actor中最大的actor數目

    單元測試:

require 'vendor/autoload.php';
\EasySwoole\EasySwoole\Core::getInstance()->initialize();


use EasySwoole\EasySwoole\Actor\ActorManager;
use App\Room;
go(function (){
    //模擬註冊Actor ,若在整個easySwoole服務中,客戶端不必重複註冊,因為已經在全域性事件中註冊了
    ActorManager::getInstance()->register(Room::class)->setActorProcessNum(3)->setActorName('RoomActor');//一樣需要註冊
    //新增一個actor ,若成功返回actorId,若超出數目則-1
    $ret = ActorManager::getInstance()->actorClient(Room::class)->create([
        'arg'=>1,
        'time'=>time()
    ]);
    //單獨退出某個actor
    $ret = ActorManager::getInstance()->actorClient(Room::class)->exit('0011');
    //單獨推送給某個actor
    //$ret = ActorManager::getInstance()->actorClient(Room::class)->push('0001',2);
   //單獨推送給全部actor
//    $ret = ActorManager::getInstance()->actorClient(Room::class)->pushMulti([
//        "0001"=>'0001data',
//        '0022'=>'0022Data'
//    ]);
     //廣播給全部actor
    //$ret = ActorManager::getInstance()->actorClient(Room::class)->broadcastPush('121212');
    //退出全部actor
//    $ret = ActorManager::getInstance()->actorClient(RoomActor::class)->exitAll();
    var_dump($ret);
});

    此外,此次更新,EasySwoole還提供了FastCache,一個全記憶體的誇程序快速快取服務與CronTab規則定時器支援。

EasySwoole 官網地址:https://www.easyswoole.com

EasySwoole QQ 群:633921431