近期连载的用swoole4.0 开发自己的框架,收到了很多盆友的反馈,能帮助到一些人,我也非常乐意,但自己撸一个很全面的框架是需要时间和沉淀的,大部分我们都是可以站在巨人的肩膀上。
那怎么选择一个框架?在我看来,可以考虑以下几点
是否有成熟的团队
是否有专人维护
是否有很好的文档
是否自己能cover住 (不是必需要了解所有的细节,如果官方支持度足够好,那就可以先用)
是否有比较成熟的案例
社区是否比较成熟和活跃
今天推荐一个我认为目前swoole生态最成熟的开发框架之一:easyswoole
easyswoole框架就用在出品团队所有的项目中,是一个从实践中不断得到验证的框架,满足所有的条件,
es公司的CEO是框架的核心开发者
es有专门的团队只负责框架的开发
es有专门的人员负责文档和社区
框架被广泛应用于不下100个项目中,其中有BAT级别的公司在使用
es社区很活跃和文档质量非常高
swoolel开发团队支持,es如有碰到swoole层的问题都能得到及时的解决
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
本文由 半桶水 授权 饭米粒 发布,转载请注明本来源信息和以下的二维码(长按可识别二维码关注)