企業級開發框架EasySwoole 3.0.10釋出啦,全協程Actor模式支援,助力遊戲物聯網行業
阿新 • • 發佈:2018-12-24
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