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

用swoole实现mysql的连接池摘自https://github.com/153734009/doc/blob/master/php/mysql_pool.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 . "\n");
  }else{
  $serv->send($fd, "Err:Task timeout\n");
  }
  //异步的时候就麻烦了,需要把$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连接数
  */

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


推荐阅读
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 如何解决TS1219:实验性装饰器功能可能在未来版本中更改的问题
    本文介绍了两种方法来解决TS1219错误:通过VSCode设置启用实验性装饰器,或在项目根目录下创建配置文件(jsconfig.json或tsconfig.json)。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Bootstrap 缩略图展示示例
    本文将展示如何使用 Bootstrap 实现缩略图效果,并提供详细的代码示例。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
author-avatar
手机用户2502931803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有