我为什么要写这些东西呢!因为好多的文档他并不是我所想的能复制粘贴就直接用了!还要改!有的地方写的还不全.复制过来就报错!!而我希望我之前学过的东西在以后用的时候能tm直接复制粘贴去使用它!减少我效率,并不是百分之百的乐于分享!只是笔记好多都是贴的图.直接复制代码不好看,嘤嘤嘤
QQ20190506-0.JPG
好话不多说!首先来安装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);
}

运行结果
1.png
很简单的就成功了嘛!不过注意看文档!这里必须要点过去看下文档哈!因为他是这么说的由于是协程状态,每次请求进来都必须使用不同的实例,如果一个请求进来就new,完成请求逻辑就销毁,每次都会创建连接,然后销毁,这样开销会非常大,所以我们可以采用连接池方式,复用连接Mysql协程连接池传送门.看了如果觉得他的好讲的明白就不用回来了.毕竟我不会讲.
EasySwooleEvent.phpinitialize方法中注册连接池对象
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.phpcreateObject方法就行

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);
}

3.png
很明显成功了嘛!也没干什么嘛.官方还给了一堆的方法.有兴趣可以自己尝试哈

Last modification:February 18th, 2020 at 10:33 pm