EasySwoole 3.0.10 发布,全协程 Actor 模式支持,助力游戏物联网行业

e
 easySwoole
发布于 2018年12月24日
收藏 20

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

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:EasySwoole 3.0.10 发布,全协程 Actor 模式支持,助力游戏物联网行业
加载中
返回顶部
顶部