文档地址

https://hyperf.wiki/2.2/#/zh-...

如何定义连接池?

依照文档的要求在app/Pool门路下PHP文件MyConnectionPool.php。此时文件内容

<?phpnamespace App\Pool;use Hyperf\Contract\ConnectionInterface;use Hyperf\Pool\Pool;use Pheanstalk\Pheanstalk;class MyConnectionPool extends Pool{    public function createConnection(): ConnectionInterface    {        return new MyConnection();    }}

在办法createConnetion返回的是一个接口ConnectionInterface,所以须要咱们自定义MyConnection类并实现接口ConnectionInterface

<?phpnamespace App\Pool;use Hyperf\Contract\ConnectionInterface;use Hyperf\Pool\Pool;use Pheanstalk\Pheanstalk;class MyConnectionPool extends Pool{    public function createConnection(): ConnectionInterface    {        return new MyConnection();    }}class MyConnection implements ConnectionInterface{    public function getConnection(): Pheanstalk    {        // TODO: Implement getConnection() method.        return Pheanstalk::create(env('BEANSTALK_HOST'), env('BEANSTALK__PORT'));    }    public function reconnect(): bool    {        return true;        // TODO: Implement reconnect() method.    }    public function check(): bool    {        return true;        // TODO: Implement check() method.    }    public function close(): bool    {        return true;        // TODO: Implement close() method.    }    public function release(): void    {        // TODO: Implement release() method.    }}

在下面代码的示例中实现了对beanstalkd的连贯的创立。

如何应用?

在app/Controller/IndexController.php减少办法get

public function get(){    $container        = \Hyperf\Utils\ApplicationContext::getContainer();    $myConnectionPool = new MyConnectionPool($container);    $conn             = $myConnectionPool->get();    $this->beans = $conn->getConnection();    $job         = $this->beans->useTube("normal")->put('jj');    $conn->release();    return [$job->getData(), $job->getId()];}

config/routes.php减少路由,能拜访即可

Router::get('/get', [\App\Controller\IndexController::class, 'get']);

至此hyperf如何应用自定义连接池实现。