php 连接池 idletime,GitHub - swover/pool: 连接池

连接池

提供基础的连接池功能,只要实现了ConnectorInterface接口的类都可使用。

通过连接池类的__call魔术方法,安全的实现了获取连接、放回连接的操作,使用者不用担心连接的冗余。

安装

composer require swover/swover

composer update

说明

/**

* 连接池构造函数

*

* @param array $poolConfig 连接池配置

* @param ConnectorInterface $connector 连接器实例

*/

public function __construct(array $poolConfig, ConnectorInterface $connector);

连接池配置

$poolConfig = [

'minSize' => 1, // 连接池最小连接数

'maxSize' => 10, // 连接池最大连接数

'waitTime' => 3, // 获取连接的超时时间

'idleTime' => 120, // 连接闲置超时时间

'poolHandler' => '', //连接池类型

'failCallback' => '', //连接报错时的回调

];

minSize

连接池的最小连接数,默认1。

获取连接时,如果无可用连接(连接池为空)且已用连接数小于最小连接数时,创建连接返回。

释放连接时,如果有可用连接(连接池不空)且已用连接数大于最小连接数时,移除连接。

maxSize

连接池的最大连接数,限定了连接池的最大容量,默认10。

获取连接时,如果无法取出连接,但已用连接总数小于最大连接数,创建连接返回。

释放连接时,如果连接池已满,移除连接。

waitTime

获取连接的超时时间,阻塞的从连接池获取连接,当阻塞时间已过仍未获取连接时,做下一步处理或抛出异常,默认3秒。

idleTime

连接闲置超时时间,即连接放入连接池后可以闲置的时间,默认12秒。

每次连接放入池子时,都会更新最后活跃时间。获取连接时,通过最后活跃时间和闲置时间判断当前连接是否可用,如果已超时,则移除此链接并重新获取。

poolHandler

指定连接池的具体类型,可传字符串['channel','normal']、实现了PoolHandler抽象类的对象,默认normal。

normal:使用\SplQueue类的作为连接池。

channel:当显式的指定此类型或处于swoole协程内时,使用\Swoole\Coroutine\Channel作为连接池。

自定义对象:可自行使用实现了PoolHandler的对象。

failCallback

当通过__call调用连接的方法时,如果捕获异常,会回调预定义的处理方法,必须是is_callable的。

回调函数接收两个参数,当前连接$connection,异常对象\Throwable。

getConnection()

从连接池获取一个可用连接。

releaseConnection($connection)

释放一个连接到连接池。

__call()

当通过此对象调用连接类的方法时,将在此魔术方法中实现:获取连接、调用方法、释放连接、捕获异常的操作。

示例

//连接器 connector

class MySQLConnector implements \Swover\Pool\ConnectorInterface

{

private $config = [];

public function __construct(array $config)

{

$this->config = $config;

}

public function connect()

{

return new \YourConnector([

'database' => $this->config['database'],

'host' => $this->config['host'],

'port' => $this->config['port'],

'username' => $this->config['username'],

'password' => $this->config['password'],

]);

}

public function disconnect($connection)

{

// TODO: Implement disconnect() method.

}

public function reset($connection)

{

// TODO: Implement reset() method.

}

public function ping($connection)

{

// TODO: Implement ping() method.

}

}

//配置

$config = [

'database' => 'test',

'host' => '127.0.0.1',

'port' => '3306',

'username' => 'root',

'password' => 'root',

'pool_config' => [

'minSize' => 3,

'maxSize' => 50,

'waitTime' => 3,

'idleTime' => 120,

'poolHandler' => 'channel',

'failCallback' => function($connection, $e) {

echo $e->getMessage();

}

]

];

//构造连接池

$pool = new ConnectionPool($config['pool_config'], new MySQLConnector($config));

// 获取连接

$connection = $pool->getConnection();

// 执行查询

echo $connection->query("SELECT 1;");

// 释放连接

$pool->releaseConnection($connection);

// 通过__call自动获取链接、执行查询、释放连接

$pool->query("SELECT 1;");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值