近期连载的用swoole4.0 开发自己的框架,收到了很多盆友的反馈,能帮助到一些人,我也非常乐意,但自己撸一个很全面的框架是需要时间和沉淀的,大部分我们都是可以站在巨人的肩膀上。


那怎么选择一个框架?在我看来,可以考虑以下几点

  1. 是否有成熟的团队

  2. 是否有专人维护

  3. 是否有很好的文档

  4. 是否自己能cover住 (不是必需要了解所有的细节,如果官方支持度足够好,那就可以先用)

  5. 是否有比较成熟的案例

  6. 社区是否比较成熟和活跃


今天推荐一个我认为目前swoole生态最成熟的开发框架之一:easyswoole


怎么选择一个开发框架_java


easyswoole框架就用在出品团队所有的项目中,是一个从实践中不断得到验证的框架,满足所有的条件,

  1. es公司的CEO是框架的核心开发者

  2. es有专门的团队只负责框架的开发

  3. es有专门的人员负责文档和社区

  4. 框架被广泛应用于不下100个项目中,其中有BAT级别的公司在使用

  5. es社区很活跃和文档质量非常高

  6. swoolel开发团队支持,es如有碰到swoole层的问题都能得到及时的解决

  7. es本身的代码质量还是很不错的


这次es有了一个非常棒的新feature, 有兴趣的可以看看


--------------下面是官方通稿-----------


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 定义:  

<?php
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


----------通稿结束-----------


最后,所有的框架都不如自己撸的框架,所以后面可以继续跟着桶哥撸框架吧 


查看原文,开始es之旅

 ------------伟大的分割线-----------

PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!

饭米粒只发原创或授权发表的文章,不转载网上的文章

所发的文章,均可找到原作者进行沟通。

也希望各位多多打赏(算作稿费给文章作者),更希望大家多多投搞。

投稿请联系:

shenzhe163@gmail.com

本文由 半桶水 授权 饭米粒 发布,转载请注明本来源信息和以下的二维码(长按可识别二维码关注)

怎么选择一个开发框架_java_02