<?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的更多相关文章

  1. Node.js使用MySQL的连接池

    使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL ...

  2. [nodejs]解决mysql和连接池(pool)自动断开问题

    最近在做一个个人项目,数据库尝试使用了mongodb.sqlite和mysql.分享一下关于mysql的连接池用法.项目部署于appfog,项目中我使用连接池链接数据库,本地测试一切正常.上线以后,经 ...

  3. Swoole 中使用 PDO 连接池、Redis 连接池、Mysqli 连接池

    连接池使用说明 所有连接池的实现均基于 ConnectionPool 原始连接池: 连接池的底层原理是基于 Channel 的自动调度: 开发者需要自己保证归还的连接是可重用的: 若连接不可重用,需要 ...

  4. hibernate+mysql的连接池配置

    1:连接池的必知概念    首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...

  5. Tomcat 下 mysql的连接池配置和使用

    最近维护的一个项目出了问题,最后分析是卡在数据库连接池上,然后就做了些学习. 先把我自己的方法写出来,再说下网上其他的没有成功的方法. 1.首先当然是先把mysql的jar包放在lib目录下,tonc ...

  6. Python下Mysql数据连接池——单例

    # coding:utf-8 import threading import pymysql from DBUtils.PooledDB import PooledDB from app.common ...

  7. nodejs mysql 创建连接池

    用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javas ...

  8. MySQL 使用连接池封装pymysql

    备注:1,记得先修改连接的数据库哦,(用navicat更方便一点):2,分开两个py文件写入,运行sqlhelper.py文件 一.在utils.py中写 import pymysqlfrom DBU ...

  9. 码海拾遗:基于MySQL Connector/C++的MySQL操作(连接池)

    1.MySQL安装及简单设置 (1)安装:在OSX系统下,可以使用万能的“brew install”命令来进行安装:brew isntall mysql(默认安装最新版的MySQL) (2)启动:br ...

随机推荐

  1. es6 常用总结

    1.变量 let 声明的变量只在它所在的代码块有效,不允许重复声明 const 声明是一个只读的常量.一旦声明,常量的值就不能改变. const与let的作用域相同,只在声明所在的块级作用域内有效. ...

  2. js中call、apply和bind的区别

    在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...

  3. Python之路,第一篇:Python入门与基础

    第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...

  4. TS 基础数据类型

    1.基础数据类型 Boolean布尔值   Number数字 String字符串  Array数组 Tuple元组  Enum枚举   Any    void Boolean布尔值:true/fals ...

  5. PowerDesigner15 增加Domain域

    第一步: 第二步: 点击此按钮,在弹出框中对Domain域打钩即可

  6. 20155208徐子涵Vim编辑器学习经验

    20155208徐子涵 2016-2017-2 Vim编辑器学习经验 当我们运用虚拟机进行书写代码时,我们就会用到Vim编辑器,用Vim编辑器进行编辑特别方便,而Vim编辑器中也有一些操作需要去学习. ...

  7. PTA——输出各位数字

    PTA 7-37 输出整数各位数字 方法1: #include <stdio.h> #define N 10000 int main(){ long n, temp; ; scanf(&q ...

  8. Python学习-终端字体高亮显示1

    Python学习-终端字体高亮显示   1.采用原生转义字符序列,对Windows有的版本不支持(比如win7),完美支持Linux 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显 ...

  9. Elasticsearch Docker环境下安装

    Elasticsearch Docker环境下安装 Daemon镜像配置的是https://registry.docker-cn.com Linux:vi /etc/docker/daemon.jso ...

  10. hdu 1556 A - Color the ball 其他做法

    #include<bits/stdc++.h> using namespace std; ; int c[maxn]; int n; int main() { ) { cin>> ...