我为什么要写这些东西呢!因为好多的文档他并不是我所想的能复制粘贴就直接用了!还要改!有的地方写的还不全.复制过来就报错!!而我希望我之前学过的东西在以后用的时候能tm直接复制粘贴去使用它!减少我效率,并不是百分之百的乐于分享!只是笔记好多都是贴的图.直接复制代码不好看,嘤嘤嘤
好话不多说!首先来安装mysqli类库
安装composer require easyswoole/mysqli
然后配置文件的参数官方文档是这样的
/*################ MYSQL CONFIG ##################*/
'MYSQL' => [
'host' => '192.168.75.1',
'port' => '3306',
'user' => 'root',
'timeout' => '5',
'charset' => 'utf8mb4',
'password' => 'root',
'database' => 'cry',
'POOL_MAX_NUM' => '20',
'POOL_TIME_OUT' => '0.1',
],
而我的是这样的.
host = '127.0.0.1'
port = '3306'
user = 'root'
timeout = '5'
charset = 'utf8mb4'
password = 'root'
database = 'video'
POOL_MAX_NUM = '20'
POOL_TIME_OUT = '0.1'
配置文件这里我用的是Yaconf.配置的名字为mysql.ini
这个牛逼的东西日后会写一篇(主要也是贴链接= =).现在先简单的说一下获取参数方法Yaconf::get('mysql').当然你不能直接用还需要安装.现在先给你秀一秀我是怎么用的.
测试调用接口
use EasySwoole\Mysqli\Mysqli;
use EasySwoole\Mysqli\Config as mysqlConfig;
public function test()
{
$conf = \Yaconf::get('mysql');
$mysqlConf = new mysqlConfig($conf);
$db = new Mysqli($mysqlConf);
$data = $db->get('video');
$this->writeJson(0, 'ok', $data);
}
运行结果
很简单的就成功了嘛!不过注意看文档!这里必须要点过去看下文档哈!因为他是这么说的由于是协程状态,每次请求进来都必须使用不同的实例,如果一个请求进来就new,完成请求逻辑就销毁,每次都会创建连接,然后销毁,这样开销会非常大,所以我们可以采用连接池方式,复用连接
Mysql协程连接池传送门.看了如果觉得他的好讲的明白就不用回来了.毕竟我不会讲.
在EasySwooleEvent.php
的initialize
方法中注册连接池对象PoolManager::getInstance()->register(MysqlPool::class,Config::getInstance()->getConf('MYSQL.POOL_MAX_NUM'));
注意:
那是官方的.而我的是这样的
PoolManager::getInstance()->register(MysqlPool::class,\Yaconf::get('mysql.POOL_MAX_NUM'));
可以看到调用了MysqlPool
我们发现有点点问题.至于啥问题你下载了自己和我的对比着看吧.如果你不用我的方式获取配置那就没有问题的哦~我只是适配我自己的
官方文档中有写好的链接池demo.直接下载来放到App/Utility/Pool
.根据个人哈,不一定非要放到这,demo传送门mysqlPool.demo
修改App\Utility\Pool\MysqlPool.php
的createObject
方法就行
protected function createObject()
{
//当连接池第一次获取连接时,会调用该方法
//我们需要在该方法中创建连接
//返回一个对象实例
//必须要返回一个实现了AbstractPoolObject接口的对象
$conf = \Yaconf::get('mysql');
$dbConf = new Config($conf);
return new MysqlObject($dbConf);
// TODO: Implement createObject() method.
}
然后你自己找文档吧!不给链接的.通过刚才的那个链接也行
使用defer
方法直接获取一个连接池连接,直接使用,协程结束后自动回收:
public function defert()
{
$db = MysqlPool::defer();
$data = $db->get('video');
$this->writeJson(0, 'ok', $data);
}
很明显成功了嘛!也没干什么嘛.官方还给了一堆的方法.有兴趣可以自己尝试哈