swoole控制数据库的连接池

<?php

//编写mysql连接池,这个类只能被实例化一次(单例)

class MysqlConnectionPool

{

    private static $instance;//单例对象

    private $connection_num = 20;//连接数量

    private $connection_obj = [];

    private $avil_connection_num = 20;//可用连接

    //构造方法连接mysql,创建20mysql连接

    private function __construct()

    {

        for($i=0;$i<$this->connection_num;$i++){

            $dsn = "mysql:host=127.0.0.1;dbname=swoole";

            $this->connection_obj[] =  new Pdo($dsn,'root','rootmysql123');

        }

    }

    private function __clone()

    {

        // TODO: Implement __clone() method.

    }

    public static function getInstance()

    {

        if(is_null(self::$instance)){

            self::$instance = new self();

        }

        return self::$instance;

    }

    //执行sql操作

    public function query($sql)

    {

        if($this->avil_connection_num==0){

            throw new Exception("暂时没有可用的连接诶,请稍后");

        }

        //执行sql语句

        $pdo = array_pop($this->connection_obj);

        //可用连接数减1

        $this->avil_connection_num --;

        //使用从连接池中取出的mysql连接执行查询,并且把数据取成关联数组

        $rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

        //把mysql连接放回连接池,可用连接数+1

        array_push($this->connection_obj,$pdo);

        $this->avil_connection_num ++;

        return $rows;

    }

}

//创建swool的http服务器对象

$serv = new swoole_http_server('0.0.0.0',8000);

//当浏览器链接点这个http服务器的时候,向浏览器发送helloworld

$serv->on('request', function($request,$response){

    //$request包含这个请求的所有信息,比如参数

    //$response包含返回给浏览器的所有信息,比如helloworld

    //向浏览器发送helloworld

    $stop = false;

    while (!$stop){

        try{

            $sql = "SELECT * FROM user ORDER BY id  DESC LIMIT 5";

            $rows = MysqlConnectionPool::getInstance()->query($sql);

            $response->end(json_encode($rows));

            $stop = true;

        }catch (Exception $e){

            usleep(100000);

        }

    }

});

//启动http服务器

$serv->start();

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容