• 用swoole实现mysql的连接池--摘自https://github.com/153734009/doc/blob/master/php/mysql_pool.php


    <?php
      $serv = new swoole_server("0.0.0.0", 9508);
      $serv->set(['worker_num'=>1, 'task_worker_num'=>5]);
      function onReceive($serv, $fd, $from_id, $data)
      {
      $sql = $data;
      $result = $serv->taskwait($sql);
      if($result !== false){
      $serv->send($fd, $result . " ");
      }else{
      $serv->send($fd, "Err:Task timeout ");
      }
      //异步的时候就麻烦了,需要把$fd传递到onFinish,才能send数据到
      //$serv->task($sql);
      }
      /**
      * task保持数据库连接
      * 使用静态变量,因为变量没有释放,所以才能保持连接
      * mysql连接的数量= task_worker_num
      */
      function onTask($serv, $fd, $from_id, $sql)
      {
      static $conn = null;
      if($conn == null){
      $conn = mysqli_connect('127.0.0.1', 'root', '123456', 'help');
      if(!$conn){
      $conn = null;
      $serv->finish('ERR:'.mysqli_connect_error());
      return;
      }
      }
      $result = $conn->query($sql);
      if(!$result){
      $serv->finish('ERR:'.mysqli_error($conn));
      return;
      }
      $data = $result->fetch_all(MYSQLI_ASSOC);
      $serv->finish('OK:'.serialize($data));
      }
      function onFinish($serv, $task_id, $data)
      {
      // 异步Task时有效
      echo "AsyncTask Finish:Connect.PID=".posix_getpid().PHP_EOL;
      }
      $serv->on('Receive', 'onReceive');
      $serv->on('Task', 'onTask');
      $serv->on('Finish', 'onFinish');
      $serv->start();
       
      //以下是客户端代码
      //$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞
      //$client->connect('172.18.107.194', 9508, 0.5, 0);
      //$client->send("show tables");
      //$data = $client->recv();
       
      /**
      * 查看mysql连接
      *
      * 1. mysql -uroot -p123456
      * 2. show status;
      * 其中的
      * Threads_connected | 1
      * 就是mysql连接数
      */
  • 相关阅读:
    DotnetCore 单文件发布
    Parallel.ForEach 之 MaxDegreeOfParallelism
    Quartznet速记
    C# SendAysnc 超时
    微耕门禁跨网段搜索代理
    服务守护DOS脚本
    Flutter速记
    ShowDoc速记
    Docker运行dotnetcore
    Redis速记
  • 原文地址:https://www.cnblogs.com/si812cn/p/7777997.html
Copyright © 2020-2023  润新知