热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql连接池报错clienthasalreadybeenboundtoanothercoroutine?

看了swoole的协成文档,说在不同协成内不能用通一个client,但是做了一个简单连接池还是会报mysqlclienthasalreadybeenboundtoanotherc

看了swoole的协成文档,说在不同协成内不能用通一个client,但是做了一个简单连接池还是会报mysql client has already been bound to another coroutine!不知道是我哪里写的不对,或者没懂意思,请大神指教.



mysqlPool.php ------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

/**

 * Created by PhpStorm.

 * User: shenyang.qiu

 * Date: 2019/5/6

 * Time: 16:27

 */

class mysqlPool {

    const  MAXNUM = 50;

    static $nownum = 0;

    static $pool = [];

    public static function getMysql()

    {

        if (count(self::$pool)) {

            return array_pop(self::$pool);

        } else {

            try {

                if (self::$nownum >self::MAXNUM) {

                    $timeout = 3;

                    while ($timeout) {

                        co::sleep(0.5);

                        $timeout = $timeout -0.5;

                        if(count(self::$pool)) {

                            return array_pop(self::$pool);

                        }

                    }

                    return false;

                } else {

                    $mysql = new \Swoole\Coroutine\MySQL();

                    self::$nownum++;

                    $mysql->connect([

                        'host' => '******',

                        'port'=>'******',

                        'user' => '****',

                        'password' => '*****',

                        'database' => '****',

                    ]);

                    array_push(self::$pool,$mysql);



                    return $mysql;

                }

            } catch (swoole_mysql_exception $exception) {

                var_dump($exception->getMessage());

                return false;

            }



        }

    }





    public static function realseMysql($pdo)

    {

        return array_push(self::$pool,$pdo);

    }

}

server.php ------------------------------------



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

/**

 * Created by PhpStorm.

 * User: shenyang.qiu

 * Date: 2019/5/7

 * Time: 13:16

 */

require_once 'mysqlPool.php';

$server = new swoole_http_server('0.0.0.0',9502,SWOOLE_BASE,SWOOLE_TCP);

$server->on('workerstart',function(swoole_http_server $server){

    swoole_timer_tick(2000,function(){

        var_dump(mysqlPool::$nownum);

    });

});

$server->on('request',function(swoole_http_request $request, swoole_http_response $response) {

    try {

        $mysql =  mysqlPool::getMysql();

        if ($mysql) {

            $mysql->setDefer();

            $mysql->query('select * from admin');

            $redis = new \Swoole\Coroutine\Redis();

            $redis->connect('127.0.0.1',6379);

            $redis->setDefer();

            $redis->get('test');

            $mysqlinfo = $mysql->recv(1);

            $redisinfo = $redis->recv(1);

            mysqlPool::realseMysql($mysql);

            unset($mysql);

            $redis->close();

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

        } else {

            $response->end('get mysql filed');

            var_dump('get mysql failed');

        }

    } catch (Exception $e)  {

        var_dump('有错误了');

    }







});

$server->start();

client.php ----------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
go(function() {

    $t1 = microtime(true);

    $client = [];

    for ($i=0;$i<100;$i++) {

        $httpclient = new \Swoole\Coroutine\Http\Client('127.0.0.1',9502);

        $httpclient->set([

            'Host' => "localhost",

            "User-Agent" => 'Chrome/49.0.2587.3',

            'Accept' => 'text/html,application/xhtml+xml,application/xml',

            'Accept-Encoding' => 'gzip',

        ]);

        $client[] = $httpclient;

        $httpclient->setDefer();

        $httpclient->get('/');



    }

    foreach ($client as $row) {

        $msg = $row->recv();

        var_dump($row->body);

        $row->close();

    }

    $t2 = microtime(true);

    var_dump($t2-$t1);



});

报错信息:
[2019-05-08 14:48:53 *21631.0] ERROR check_bind (ERROR 10002): mysql client has already been bound to another coroutine#57, reading or writing of the same socket in multiple coroutines at the same time is not allowed.


   



推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文讨论了一个关于正则的困惑,即为什么一个函数会获取parent下所有的节点。同时提出了问题是否是正则表达式写错了。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
author-avatar
wu勿望我_957
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有