Skip to content

Commit 1cd1521

Browse files
committed
Merge remote-tracking branch 'swoole/master' into memcache-support
2 parents 520a0e9 + 88d18d9 commit 1cd1521

File tree

11 files changed

+491
-42
lines changed

11 files changed

+491
-42
lines changed

.travis.yml

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
sudo: required
2+
3+
language: c
4+
5+
matrix:
6+
include:
7+
- os: linux
8+
dist: trusty
9+
env:
10+
- PHP_VERSION_MAJOR: "7.1"
11+
- PHP_INSTALL_VERSION: "7.1.1"
12+
- os: linux
13+
dist: trusty
14+
env:
15+
- PHP_VERSION_MAJOR: "7.0"
16+
- PHP_INSTALL_VERSION: "7.0.15"
17+
- os: linux
18+
dist: trusty
19+
env:
20+
- PHP_VERSION_MAJOR: "5.6"
21+
- PHP_INSTALL_VERSION: "5.6.30"
22+
- os: linux
23+
dist: trusty
24+
env:
25+
- PHP_VERSION_MAJOR: "5.5"
26+
- PHP_INSTALL_VERSION: "5.5.38"
27+
- os: linux
28+
dist: trusty
29+
env:
30+
- PHP_VERSION_MAJOR: "5.4"
31+
- PHP_INSTALL_VERSION: "5.4.45"
32+
- os: linux
33+
dist: trusty
34+
env:
35+
- PHP_VERSION_MAJOR: "5.3"
36+
- PHP_INSTALL_VERSION: "5.3.29"
37+
addons:
38+
apt:
39+
packages: build-essential
40+
41+
before_install:
42+
# build PHP without ZTS
43+
- export CP_PATH=`pwd`
44+
- sudo apt-get install -qqy curl libcurl3-openssl-dev libxslt1-dev re2c libxml2 libxml2-dev bison libbz2-dev libreadline-dev libedit-dev libpng12-0 libpng12-dev libjpeg-dev libjpeg8-dev libjpeg8 libgd-dev libgd3 libssl-dev openssl gettext libicu-dev libmhash-dev libmhash2 libmcrypt-dev libmcrypt4 uuid-dev
45+
- ${CP_PATH}/.travis/php_download.sh ${PHP_INSTALL_VERSION}
46+
- export PHP_BUILD_CONF="--with-libedit --with-pear --enable-fpm --enable-mbstring --with-pcre-dir --enable-mysqlnd --enable-pdo --with-pdo-mysql --with-openssl --with-curl --enable-zip --enable-sockets --enable-bcmath --enable-calendar --enable-ftp --disable-intl --enable-mbstring --enable-pcntl"
47+
- ${CP_PATH}/.travis/php_install.sh "${CP_PATH}" php-${PHP_INSTALL_VERSION}.tar.gz "$PHP_BUILD_CONF"
48+
- export PHP_PATH=${CP_PATH}/php-${PHP_INSTALL_VERSION}
49+
- export PHP_BIN_DIR=${PHP_PATH}/bin
50+
- export PATH="${PHP_BIN_DIR}:${PATH}"
51+
- export PHP_BIN=${PHP_BIN_DIR}/php
52+
53+
install:
54+
- sudo mkdir -m 777 /var/log/php-connection-pool
55+
- chmod +x ${CP_PATH}/pool_server ${CP_PATH}/initd-php-connection-pool
56+
- sudo cp ${CP_PATH}/pool_server /usr/local/bin/pool_server
57+
- sudo cp ${CP_PATH}/config.ini.example /etc/pool.ini
58+
- ${CP_PATH}/.travis/php_install_ext.sh "${CP_PATH}" "${PHP_PATH}"
59+
- echo 'extension = connect_pool.so' > ${PHP_PATH}/config/conf.d/connect_pool.ini
60+
- if [ ! -f /bin/env ];then sudo ln -s /usr/bin/env /bin/env; fi
61+
62+
before_script:
63+
- $PHP_BIN -m | grep -s connect_pool
64+
- sudo mkdir -m 777 /var/run/cp
65+
- sudo touch /var/run/php_connection_pool.pid && sudo chmod 777 /var/run/php_connection_pool.pid
66+
- ${CP_PATH}/pool_server start
67+
68+
script:
69+
- netstat -tlnp |grep 6253
70+
- ${CP_PATH}/pool_server status
71+
- env TEST_PHP_EXECUTABLE=$PHP_BIN $PHP_BIN -c "${PHP_PATH}/config/php.ini" "${PHP_PATH}/run-tests.php" "${CP_PATH}/tests" |tee /tmp/php_cp_test.result && fail_num=$(grep -o -E "Tests\s+failed\s*:\s*[0-9]{1,}\s*\(" /tmp/php_cp_test.result |grep -o -E "[0-9]{1,}" -) && echo $fail_num && [ "$fail_num"=="0" ]
72+
73+
after_success: true
74+
75+
after_failure: true
76+
77+
after_script: true
78+
79+
notifications:
80+
email:
81+
recipients:
82+
83+
84+
on_success: change
85+
on_failure: always

.travis/php_download.sh

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
function log_download()
3+
{
4+
echo "[download_php] $@" 1>&2
5+
}
6+
7+
function download_php()
8+
{
9+
url="$1"
10+
tar="$2"
11+
12+
wget -t3 -T3 -O "${tar}.tmp" "${url}"
13+
14+
ret=$?
15+
if [ $ret -eq 0 ]; then
16+
mv -f ${tar}.tmp $tar
17+
log_download "done $tar"
18+
else
19+
rm -f ${tar}.tmp
20+
log_download "fail"
21+
fi
22+
23+
return $ret
24+
}
25+
26+
27+
# main
28+
if [ -z "$1" ]; then
29+
echo "usage: `basename $0` <ver.si.on>"
30+
exit 1
31+
fi
32+
version="$1"
33+
log_download "version: $version"
34+
35+
# choose source
36+
tar_file="php-${version}.tar.gz"
37+
url="https://secure.php.net/get/${tar_file}/from/this/mirror"
38+
39+
# download
40+
log_download "download from $url"
41+
download_php "$url" "$tar_file"

.travis/php_install.sh

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#!/bin/bash
2+
function log_install()
3+
{
4+
echo "[install_php] $@" 1>&2
5+
}
6+
7+
function install_php_from_tar()
8+
{
9+
tar="$2"
10+
src=`echo $tar | sed 's/^.*\/\?\(php-[0-9]\+\.[0-9]\+\.[0-9]\+\)\.tar\.gz$/\1/'`
11+
if [ -z "$src" ]; then
12+
return 1
13+
fi
14+
15+
# prepare normal
16+
log_install "extract tar ball"
17+
rm -fr $src && tar zxf $tar
18+
19+
# build
20+
echo "tar:"$3
21+
install_php $1 $src "$3"
22+
}
23+
24+
function install_php()
25+
{
26+
# init
27+
prefix=$1
28+
src=$2
29+
param_extra=$3
30+
echo "build:"$3
31+
echo $param_extra
32+
33+
# version related
34+
version=`grep ' PHP_VERSION ' $src/main/php_version.h | sed 's/^#define PHP_VERSION "\([0-9a-zA-Z\.]\+\)".*$/\1/'`
35+
buildname="php-${version}"
36+
log_install "[$buildname] build"
37+
38+
cd $src
39+
40+
# prepare
41+
#param_general="--disable-all"
42+
conf_dir="${prefix}/${buildname}/config"
43+
conf_ext_dir="${conf_dir}/conf.d"
44+
[ ! -d "$conf_ext_dir" ] && mkdir -p -m 755 "$conf_ext_dir"
45+
cp "${prefix}/${buildname}/php.ini-production" "${conf_dir}/php.ini"
46+
47+
param_general="--with-config-file-scan-dir=${conf_dir} --sysconfdir=${conf_dir} --with-config-file-path=${conf_dir}/php.ini --with-config-file-scan-dir=${conf_ext_dir}"
48+
param_sapi="--enable-cli --disable-cgi"
49+
cmd="./configure --quiet --prefix=${prefix}/${buildname} $param_general $param_sapi $param_extra"
50+
51+
# configure
52+
log_install "[$buildname] configure"
53+
log_install "$cmd"
54+
$cmd
55+
56+
log_install "[$buildname] make"
57+
# NOT DO a meaningless "make clean"! it's just extracted
58+
make --quiet && \
59+
make install
60+
ret=$?
61+
62+
if [ $ret -eq 0 ]; then
63+
log_install "[$buildname] done"
64+
else
65+
log_install "[$buildname] fail"
66+
fi
67+
cd "${CP_PATH}"
68+
}
69+
70+
# main
71+
if [ $# -lt 2 ]; then
72+
echo "usage: `basename $0` <prefix> <php-tarfile>"
73+
exit 1
74+
fi
75+
76+
# argument
77+
prefix="$1"
78+
if [ ! -d "$prefix" ]; then
79+
log_install "error: invalid prefix \"$prefix\""
80+
exit 1
81+
fi
82+
log_install "prefix: $prefix"
83+
tarfile="$2"
84+
if [ ! -f "$tarfile" ]; then
85+
log_install "error: invalid PHP tar file \"$tarfile\""
86+
exit 1
87+
fi
88+
log_install "tarfile: $tarfile"
89+
90+
extra_param="$3"
91+
echo "main:${extra_param}"
92+
[ -n "$extra_param" ] && log_install "extra param: ${extra_param}"
93+
94+
# install
95+
install_php_from_tar $prefix $tarfile "$extra_param"

.travis/php_install_ext.sh

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/bash
2+
function log_ext()
3+
{
4+
echo "[install_ext] $@" 1>&2
5+
}
6+
7+
function install_ext()
8+
{
9+
php_path="$2"
10+
php="$php_path/bin/php"
11+
phpize="$php_path/bin/phpize"
12+
phpcfg="$php_path/bin/php-config"
13+
if [ ! -f $phpcfg ]; then
14+
log_ext "invalid PHP path $php_path"
15+
return 1
16+
fi
17+
18+
# change to extension path
19+
cd $1
20+
21+
log_ext "ext_path: ${1}"
22+
log_ext "php_path: ${php_path}"
23+
log_ext "current_path: `pwd`"
24+
25+
# configure, make
26+
$phpize && ./configure --with-php-config=$phpcfg && make install
27+
ret=$?
28+
29+
if [ $ret -eq 0 ]; then
30+
log_ext "done"
31+
else
32+
log_ext "fail"
33+
fi
34+
cd "${CP_PATH}"
35+
36+
return $ret
37+
}
38+
39+
# main
40+
if [ $# -ne 2 ]; then
41+
echo "usage: `basename $0` <extension-path> <php-path>"
42+
exit 1
43+
fi
44+
45+
# argument
46+
ext_path="$1"
47+
if [ ! -d "$ext_path" ]; then
48+
log_ext "error: invalid extension-path \"$ext_path\""
49+
exit 1
50+
fi
51+
log_ext "ext_path: $ext_path"
52+
php_path="$2"
53+
if [ ! -d "$php_path" ]; then
54+
log_ext "error: invalid PHP path \"$php_path\""
55+
exit 1
56+
fi
57+
log_ext "php_path: $php_path"
58+
59+
# build
60+
install_ext $ext_path $php_path

README.md

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
## php-cp(php-connect-pool),redis和pdo的本地代理
1+
## php-cp(php-connect-pool),redis和pdo的本地代理 [![Build Status](https://secure.travis-ci.org/swoole/php-cp.svg?branch=master)](http://travis-ci.org/swoole/php-cp)
2+
23
[中文简介] http://blog.sina.com.cn/s/blog_9eaa0f400102v9fd.html
34

45
提供连接池,读写分离,负载均衡,慢查询日志,大数据块日志等功能
@@ -9,16 +10,12 @@
910
- linux 2.6+
1011
- pdo and redis extension install
1112

12-
## 安装
13-
14-
+ `phpize && ./configure && make install`
15-
+ `echo "extension=xx/connect_pool.so" >> php.ini`
1613

1714
## 使用Docker安装
1815

1916
可以使用Docker编译,需要在项目的根目录下运行:
2017

21-
1. 根据自己的配置,复制 `php.ini.example` 文件为 `php.ini` 文件,修改 `pool.ini` 文件
18+
1. 根据自己的配置,复制 `pool.ini.example` 文件为 `pool.ini` 文件,修改 `pool.ini` 文件
2219
2. `docker build -t php-cp .`
2320

2421

@@ -51,12 +48,23 @@ pdoProxy和原生Pdo不一样的一点是 默认pdo是静默模式 不抛异常
5148
- thinkphp 请参考 http://git.oschina.net/xavier007/THINKPHP_phpcp_driver
5249
- discuz 请参考 https://github.com/xluohome/php-cp-for-discuz
5350

54-
## 使用
55-
* 将项目中的pool.ini文件mv到/etc/pool.ini,并根据需求修改配置文件
51+
## 安装使用
52+
* 安装扩展 安装步骤跟其它PHP扩展无差别
53+
54+
```
55+
$ phpize && ./configure && make && make install //如果报phpize命令找不到请安装php-devel包
56+
$ echo "extension=connect_pool.so" >> php.ini
57+
//如果PHP启用了目录配置 上一步骤可以换为下面的方式 配置目录可以通过 php --info|grep 'Scan'获取
58+
$ echo "extension=connect_pool.so" > /etc/php.d/20-connection_pool.ini
59+
```
60+
61+
* 初始化配置(一次性)
5662
```
57-
$ mv ./pool.ini.example /etc/pool.ini
58-
$ chmod +x ./pool_server //pool_server为php脚本 可自行修改
59-
$ mv pool_server /usr/local/bin/
63+
$ cp ./pool.ini.example /etc/pool.ini //根据需求修改配置内容
64+
$ mkdir -m 755 /var/log/php-connection-pool //创建日志目录 目录文件夹不存在或没权限会导致日志写不起
65+
$ chmod +x ./pool_server //x权限git已经设置 为稳妥再设置一次 pool_server为php脚本 可自行修改
66+
$ [ -f /bin/env ] || sudo ln -s /usr/bin/env /bin/env //deb系的系统(如debian、ubuntu)env的路径为/usr/bin/env做软链接兼容处理
67+
$ cp ./pool_server /usr/local/bin/pool_server
6068
```
6169

6270
* 日常运维使用
Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
[common]
22
;log文件
3-
log_file = /tmp/phpcp.log
3+
log_file = /var/log/php-connection-pool/server.log
44
;the num of TCP connections release every idel_time cycles(连接空闲后的回收力度,值越大回收的越快,但是会造成更多的消耗)
55
recycle_num = 2
66
;In this period of time,if no process use this connection ,the TCP connection will release(空闲连接回收的发呆时间 单位秒)
7-
idel_time = 2
7+
idel_time = 5
88
;worker 进程ping数据库的间隔时间s
9-
ping_time = 30
10-
;;max query package len,exceed will throw exception(最大转发的数据包 字节,超过抛异常)
11-
max_read_len = 1048576
9+
ping_time = 15
10+
;;max query package len,exceed will throw exception(最大转发的数据包,超过5M抛异常)
11+
max_read_len = 16777216
1212
;run as daemonize(是否开启守护进程化)
1313
daemonize = 1
1414
;If the num of connection to max, whether to use the queue buffer, set to 0 throw an exception(连接都被占用后,再获取连接是否使用队列缓冲,设置为0直接抛异常)
@@ -21,20 +21,16 @@ port = 6253
2121
;max_hold_time_to_log = 1000
2222
;for the big data monitor,unit byte ,default 0 means not open(单次查询超过这么大字节写log日志 单位字节 默认为0为不开启log)
2323
;tips你可以将这个设置非常小,那么你就可以在log里面看到所有的数据库操作
24-
;max_data_size_to_log = 1024
25-
24+
;max_data_size_to_log = 40960
25+
;max_data_size_to_log = 1
2626

2727
;注意数据源需要加 ''
2828
;PDO数据源要与new PDO的第一个参数完全一致(包括顺序)
2929
;如果不配置数据源 那么默认最大是20 最小是1 ,在第一次查询的时候自动创建
30-
['mysql:host=192.168.1.19;dbname=mz_gay_group2;charset=utf8'];mysql配置
31-
pool_min = 2
32-
pool_max = 30
33-
34-
['mysql:host=192.168.1.19;dbname=mz_gay_group;charset=utf8'];mysql配置
35-
pool_min = 2
36-
pool_max = 30
30+
;['mysql:dbname=db_name;host=db_host;port=3306;charset=utf8']
31+
;pool_min = 4 ;必须大于0
32+
;pool_max = 10
3733

38-
['192.168.1.19:6379:0'];redis配置 ip:port:db号
39-
pool_min = 2
40-
pool_max = 30
34+
;['192.168.1.19:6379:0'];redis配置 ip:port:db号
35+
;pool_min = 2 ;必须大于0
36+
;pool_max = 10

connect_pool_client.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "php_network.h"
2020
#include "ext/standard/basic_functions.h"
2121

22+
2223
extern zend_class_entry *pdo_connect_pool_class_entry_ptr;
2324
extern zend_class_entry *redis_connect_pool_class_entry_ptr;
2425
extern zend_class_entry *memcached_connect_pool_class_entry_ptr;

0 commit comments

Comments
 (0)