<?php/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/11/20
* Time: 14:12
*///编写mysql连接池,这个类只能被实例化一次(单例)classMysqlConnectionPool{privatestatic$instance;//单例对象private$connection_num=20;//连接数量private$connection_obj=[];private$avil_connection_num=20;//可用连接//构造方法连接mysql,创建20mysql连接privatefunction__construct(){for($i=0;$i<$this->connection_num;$i++){$dsn="mysql:host=127.0.0.1;dbname=swoole";$this->connection_obj[]=newPdo($dsn,'root','rootmysql123');}}privatefunction__clone(){// TODO: Implement __clone() method.}publicstaticfunctiongetInstance(){if(is_null(self::$instance)){
self::$instance=newself();}return self::$instance;}//执行sql操作publicfunctionquery($sql){if($this->avil_connection_num==0){thrownewException("暂时没有可用的连接诶,请稍后");}//执行sql语句$pdo=array_pop($this->connection_obj);//可用连接数减1$this->avil_connection_num--;//使用从连接池中取出的mysql连接执行查询,并且把数据取成关联数组$rows=$pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);//把mysql连接放回连接池,可用连接数+1array_push($this->connection_obj,$pdo);$this->avil_connection_num++;return$rows;}}//创建swool的http服务器对象$serv=newswoole_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();