連線池定義:永遠不會斷開,要求我們的這個程式是一個常駐記憶體的程式。資料庫連線池(Connection pooling)是程式啟 動時建立足夠的資料庫連接,並將這些連接組成一個連接池,由程式動態地對池中的連接進行申請,使用,釋放。
實作連接池的方法:
同步阻塞模式:
可基於swoole的AsyncTask模組實作的連接池,程式設計簡單,沒有數據同步和鎖的問題。甚至可以多個服務共享連線池。缺點是: 1. 彈性不如多執行緒連線池,無法動態增減連線 2. 有一次進程間通訊的開銷
協程模式:
可使用channel實作連線池。
建立10個mysql連線範例程式碼:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/11/20 * Time: 14:12 */ //编写mysql连接池,这个类只能被实例化一次(单例) class MysqlConnectionPool { private static $instance;//单例对象 private $connection_num = 10;//连接数量 private $connection_obj = []; //构造方法连接mysql,创建20mysql连接 private function __construct() { for($i=0;$i<$this->connection_num;$i++){ $dsn = "mysql:host=127.0.0.1;dbnane=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(); } } } MysqlConnectionPool::getInstance(); //创建swool的http服务器对象 $serv = new swoole_http_server('0.0.0.0',8000); //当浏览器链接点这个http服务器的时候,向浏览器发送helloworld $serv->on('request', function($request,$response){ //$request包含这个请求的所有信息,比如参数 //$response包含返回给浏览器的所有信息,比如helloworld //(2.3)向浏览器发送helloworld $response->end("hello world"); }); //启动http服务器 $serv->start();
效果
#建議學習: swoole教學
################################################################ #以上是swoole怎麼做mysql連線池的詳細內容。更多資訊請關注PHP中文網其他相關文章!