一.编译安装php5.6

0.安装必要软件

http://www.cnblogs.com/itfenqing/p/6055138.html

1.下载php5.6.30

http://php.net/downloads.php

2.解压

3.编译时指定为mysqlnt,启用opcache

./configure --prefix=/usr/local/php56  --enable-fpm --enable-mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --enable-debug --with-gd --with-jpeg-dir --with-png-dir --enable-mbstring --with-curl --with-libxml-dir --with-mysql --enable-sockets --enable-bcmath --enable-xml --with-bz2 --enable-zip --with-mcrypt --enable-opcache --with-openssl --with-freetype-dir=/usr/include/freetype2/freetype

  

二.编译swoole

1.下载swoole1.9.0

2.解压

3.安装

/usr/local/php56/bin/phpize
./configure --with-php-config=/usr/local/php56/bin/php-config
make
make install

  

4.拷贝php.ini-production到/usr/local/php56/php.ini

5.在/usr/local/php56/php.ini下加入

[Zend Opcache]
zend_extension = /usr/local/php56/lib/php/extensions/debug-non-zts-20131226/opcache.so
opcache.enable=1 ;#启用操作码缓存
opcache.enable_cli=1 ;#仅针对CLI环境启用操作码缓存
opcache.memory_consumption=128 ;#共享内存大小,单位MB
opcache.interned_strings_buffer=8 ;#存储临时字符串的内存大小,单位MB
opcache.max_accelerated_files=4000 ;#哈希表中可存储的脚本文件数量上限 [Swoole]
extension = /usr/local/php56/lib/php/extensions/debug-non-zts-20131226/swoole.so

  

三.swoole数据库连接池

1.服务端代码:

<?php
$serv = new swoole_server("127.0.0.1", 9508);
$serv->set(array(
'worker_num' => 100,
'task_worker_num' => 10, //MySQL连接的数量
)); function my_onReceive($serv, $fd, $from_id, $data)
{
//taskwait就是投递一条任务,这里直接传递SQL语句了
//然后阻塞等待SQL完成
$result = $serv->taskwait($data);
if ($result !== false) {
list($status, $db_res) = explode(':', $result, 2);
if ($status == 'OK') {
//数据库操作成功了,执行业务逻辑代码,这里就自动释放掉MySQL连接的占用
$serv->send($fd, var_export(unserialize($db_res), true) . "\n");
} else {
$serv->send($fd, $db_res);
}
return;
} else {
$serv->send($fd, "Error. Task timeout\n");
}
} function my_onTask($serv, $task_id, $from_id, $sql)
{
static $link = null;
if ($link == null) {
$link = new mysqli("192.168.2.15", "root", "root", "test");
if (!$link) {
$link = null;
$serv->finish("ER:" . mysqli_error($link));
return;
}
}
$result = $link->query($sql);
if (!$result) {
$serv->finish("ER:" . mysqli_error($link));
return;
}
$data = $result->fetch_all(MYSQLI_ASSOC);
$serv->finish("OK:" . serialize($data));
} function my_onFinish($serv, $data)
{
echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL;
} $serv->on('Receive', 'my_onReceive');
$serv->on('Task', 'my_onTask');
$serv->on('Finish', 'my_onFinish');
$serv->start();

  

2.客户端代码

<?php
$link=new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_SYNC);//TCP方式、同步
$link->connect('127.0.0.1',9508);//连接
$link->send('SELECT * FROM `test2`');//执行查询
$res=$link->recv(); if(!$res){
echo 'Failed!';
}
else{
print_r($res);
}
$link->close();

  

三.异步mysql客户端

<?php

$db = new swoole_mysql;
$server = array(
'host' => '192.168.2.15',
'port' => '3306',
'user' => 'root',
'password' => 'root',
'database' => 'test',
'charset' => 'utf8', //指定字符集
'timeout' => 30,
); $db->connect($server, function ($db, $r) {
if ($r === false) {
var_dump($db->connect_errno, $db->connect_error);
die;
}
$sql = 'select *,sleep(5) from test2';
$db->query($sql, function (swoole_mysql $db, $r) {
if ($r === false) {
var_dump($db->error, $db->errno);
} elseif ($r === true) {
var_dump($db->affected_rows, $db->insert_id);
}
var_dump($r);
$db->close();
});
}); echo 'ok';

  

以上代码先输出ok,在输出mysql查询结果

  

swoole编译安装/数据库连接池/异步mysql客户端的更多相关文章

  1. RHEL6 最小化系统 编译安装部署zabbix (mysql)

    RHEL6 最小化系统 编译安装部署zabbix (mysql)官方说明详细见:https://www.zabbix.com/documentation/4.0/manual/installation ...

  2. 解决数据库连接池连接mysql时,每隔8小时mysql自动断开所有连接的问题

    解决数据库连接池连接mysql时,每隔8小时mysql自动断开所有连接的问题 最近有个问题非常讨厌,我们的工程中使用自己的连接池连接mysql数据库,可mysql数据库每隔8小时就会自动断开所有链接, ...

  3. centos6.6编译安装lnmp系列之mysql

    简介: 环境:虚拟机+centos6.6 Mysql版本:5.6.21 Mysql下载地址:http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.21.t ...

  4. Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库

    在网上查了很多,最后实现了.下面写一下过程: 首先,在WEBROOT/META-INF下建一个文件context.xml,内容为: <?xml version="1.0" e ...

  5. Swoole编译安装步骤

    Swoole扩展是按照php标准扩展构建的.使用phpize来生成php编译配置,./configure来做编译配置检测,make进行编译,make install进行安装. 请下载releases版 ...

  6. 编译安装php Cannot find MySQL header files under /usr/include/mysql.

    编译php-5.5-6的mysql支持,出现Cannot find MySQL header files under /usr/include/mysql. Note that the MySQL c ...

  7. python通过数据库连接池实现mysql数据库增删改查

    import pymysql from DBUtils.PooledDB import PooledDB class SQLHandler(object): def __init__(self, ho ...

  8. Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比

    Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...

  9. python3 实现mysql数据库连接池

    首先声明一下,这篇博客进行了通过自己的代码方式,加上这篇博客,最后总结出这段代码.参考博客连接:http://blog.csdn.net/zbc1090549839/article/details/5 ...

随机推荐

  1. hdu 4305 概率dp

    /* 题目大意:有n个房间由n-1个隧道连接起来,从1号房间开始, 每个节点i都有三种可能: 1.被杀死,回到节点1,概率为ki; 2.找到出口,离开迷宫,概率ei; 3.与它相连的有m个房间,到任意 ...

  2. go环境安装

    选择想要安装的版本: http://golangtc.com/download tar -zxf go1.8.linux-amd64.tar.gz cp -R go/ /usr/local/ vi / ...

  3. 戴文的Linux内核专题:03 驱动程序【转】

    转自:http://www.lai18.com/content/432194.html 驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序.没有驱动程序,内核不知道如何与硬件沟通或者处理协 ...

  4. windows 添加自助白名单

    由于公司分部用的是动态IP,又需要用到总部的OA系统,OA完全开放对外不安全,所以写了这个工具 项目地址 https://github.com/cainiaoit/Windows-firewall-s ...

  5. python每日一类(3):os和sys

    os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...

  6. [BZOJ1052][HAOI2007]覆盖问题 二分+贪心

    1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2053  Solved: 959 [Submit][Sta ...

  7. Guava源码学习(四)新集合类型

    基于版本:Guava 22.0 Wiki:New collection types 0. 简介 Guava提供了很多好用的集合工具,比如Multiset和BiMap,本文介绍了这些新集合类型的使用方式 ...

  8. @Transactional注解事务不起作用

    @Transactional注解事务不起作用 问题:今天在项目中碰到一个事务问题,使用@Transactional注解事务,抛出异常不会滚. 解决一:https://blog.csdn.net/u01 ...

  9. LA 3026 Period

    这只是蓝书上的一道KMP水题...然后对于最长前缀的循环证明我就不说了... #include<iostream> #include<cstring> #include< ...

  10. Android Developer -- Bluetooth篇 开发实例之二 连接设备

    连接设备 In order to create a connection between your application on two devices, you must implement bot ...