通用连接池

EasySwoole通用的协程连接池管理。

安装

  1. composer require easyswoole/pool

基础实例代码

定义池对象

  1. class Std implements \EasySwoole\Pool\ObjectInterface {
  2. function gc()
  3. {
  4. /*
  5. * 本对象被pool执行unset的时候
  6. */
  7. }
  8. function objectRestore()
  9. {
  10. /*
  11. * 回归到连接池的时候
  12. */
  13. }
  14. function beforeUse(): ?bool
  15. {
  16. /*
  17. * 取出连接池的时候,若返回false,则当前对象被弃用回收
  18. */
  19. return true;
  20. }
  21. public function who()
  22. {
  23. return spl_object_id($this);
  24. }
  25. }

定义池

  1. class StdPool extends \EasySwoole\Pool\AbstractPool{
  2. protected function createObject()
  3. {
  4. return new Std();
  5. }
  6. }

不一定非要创建返回 EasySwoole\Pool\ObjectInterface 对象,任意类型对象均可

在pool组件版本>= 1.0.2后,提供了魔术池支持,可以快速进行定义池

  1. use \EasySwoole\Pool\MagicPool;
  2. $magic = new MagicPool(function (){
  3. return new \stdClass(); // 示例,可以返回实现了 ObjectInterface 的对象
  4. });
  5. // 注册后获取
  6. $test = $magic->getObj();
  7. // 归还
  8. $magic->recycleObj($test);

魔术池构造方法的第二个参数,可以接收一个 config(EasySwoole\Pool\Config类),用于定义池数量等配置。

使用

  1. $config = new \EasySwoole\Pool\Config();
  2. $pool = new StdPool($config);
  3. go(function ()use($pool){
  4. $obj = $pool->getObj();
  5. $obj2 = $pool->getObj();
  6. var_dump($obj->who());
  7. var_dump($obj2->who());
  8. });