连接池

由于 Swoole 的常驻内存特性,所以 IMI 中实现了连接池。所有的数据库、Redis连接,都通过连接池去获取。

定义连接池

连接池的配置,可以写在项目配置文件中,也可以写在服务器配置文件中。

在配置文件中有一个pools节点,里面配置的是连接池。

同步池子仅在task进程使用,异步池子在worker进程使用。一般使用时无需自行判断在哪个进程,框架会自动帮你获取对应的连接。

获取连接

获取池子中的资源

\Imi\Pool\PoolManager::getResource(string $name): IPoolResource

$name 为池子名称

获取请求上下文资源

一个请求上下文通过此方法,只能获取同一个资源

\Imi\Pool\PoolManager::getRequestContextResource(string $name): IPoolResource

尝试获取资源

\Imi\Pool\PoolManager::tryGetResource(string $name): IPoolResource|boolean

回调方式使用资源

使用回调来使用池子中的资源,无需手动释放

  1. $result = \Imi\Pool\PoolManager::use($poolName, function($resource, \Swoole\Coroutine\Redis $redis) use($key){
  2. return $redis->get($key);
  3. });

$poolName-池子名称第二个参数为回调,接收两个参数,第一个资源本身,第二个为资源里面的实例。比如上面的是Redis回调的返回值也会成为use方法的返回值

手动释放连接

\Imi\Pool\PoolManager::releaseResource(IPoolResource $resource)

自动释放连接

调用\Imi\Pool\PoolManager::getRequestContextResource()方法获取,当上下文被销毁时,会自动释放资源。