pay.php
interface Ipay
{
function withmoney();
//function withinternet();
}
class Dmeng implements Ipay
{
function withmoney()
{
echo "花人民币买东西";
}
function withinternet()
{
return "用网银支付";
}
}
usei.php
include_once 'pay.php';
class main
{
function run($vc)
{
$this->vc = $vc;
$this->vc->withinternet();
echo "yunxing";
}
}
$com= new main();
$com->run(new Dmeng);
就是上面那样,我们将interface中的某个方法注释掉,发现再调用的时候,就没用了
CURL状态码列表
状态码
状态原因
解释
0
正常访问
1
错误的协议
未支持的协议。此版cURL 不支持这一协议。
2
初始化代码失败
初始化失败。
3
URL格式不正确
URL 格式错误。语法不正确。
4
请求协议错误
5
无法解析代理
无法解析代理。无法解析给定代理主机。
6
无法解析主机地址
无法解析主机。无法解析给定的远程主机。
7
无法连接到主机
无法连接到主机。
8
远程服务器不可用
FTP 非正常的服务器应答。cURL 无法解析服务器发送的数据。
9
访问资源错误
FTP 访问被拒绝。服务器拒绝登入或无法获取您想要的特定资源或目录。最有可
能的是您试图进入一个在此服务器上不存在的目录。
11
FTP密码错误
FTP 非正常的PASS 回复。cURL 无法解析发送到PASS 请求的应答。
13
结果错误
FTP 非正常的的PASV 应答,cURL 无法解析发送到PASV 请求的应答。
14
FTP回应PASV命令
FTP 非正常的227格式。cURL 无法解析服务器发送的227行。
15
内部故障
FTP 无法连接到主机。无法解析在227行中获取的主机IP。
17
设置传输模式为二进制
FTP 无法设定为二进制传输。无法改变传输方式到二进制。
18
文件传输短或大于预期
部分文件。只有部分文件被传输。
19
RETR命令传输完成
FTP 不能下载/访问给定的文件, RETR (或类似)命令失败。
21
命令成功完成
FTP quote 错误。quote 命令从服务器返回错误。
22
返回正常
HTTP 找不到网页。找不到所请求的URL 或返回另一个HTTP 400或以上错误。
此返回代码只出现在使用了-f/--fail 选项以后。
23
数据写入失败
写入错误。cURL 无法向本地文件系统或类似目的写入数据。
25
无法启动上传
FTP 无法STOR 文件。服务器拒绝了用于FTP 上传的STOR 操作。
26
回调错误
读错误。各类读取问题。
27
内存分配请求失败
内存不足。内存分配请求失败。
28
访问超时
操作超时。到达指定的超时期限条件。
30
FTP端口错误
FTP PORT 失败。PORT 命令失败。并非所有的FTP 服务器支持PORT 命令,请
尝试使用被动(PASV)传输代替!
31
FTP错误
FTP 无法使用REST 命令。REST 命令失败。此命令用来恢复的FTP 传输。
33
不支持请求
HTTP range 错误。range "命令"不起作用。
34
内部发生错误
HTTP POST 错误。内部POST 请求产生错误。
35
SSL/TLS握手失败
SSL 连接错误。SSL 握手失败。
36
下载无法恢复
FTP 续传损坏。不能继续早些时候被中止的下载。
37
文件权限错误
文件无法读取。无法打开文件。权限问题?
38
LDAP可没有约束力
LDAP 无法绑定。LDAP 绑定(bind)操作失败。
39
LDAP搜索失败
LDAP 搜索失败。
41
函数没有找到
功能无法找到。无法找到必要的LDAP 功能。
42
中止的回调
由回调终止。应用程序告知cURL 终止运作。
43
内部错误
内部错误。由一个不正确参数调用了功能。
45
接口错误
接口错误。指定的外发接口无法使用。
47
过多的重定向
过多的重定向。cURL 达到了跟随重定向设定的最大限额跟
48
无法识别选项
指定了未知TELNET 选项。
49
TELNET格式错误
不合式的telnet 选项。
51
远程服务器的SSL证书
peer 的SSL 证书或SSH 的MD5指纹没有确定。
52
服务器无返回内容
服务器无任何应答,该情况在此处被认为是一个错误。
53
加密引擎未找到
找不到SSL 加密引擎。
54
设定默认SSL加密失败
无法将SSL 加密引擎设置为默认。
55
无法发送网络数据
发送网络数据失败。
56
衰竭接收网络数据
在接收网络数据时失败。
57
58
本地客户端证书
本地证书有问题。
59
无法使用密码
无法使用指定的SSL 密码。
60
凭证无法验证
peer 证书无法被已知的CA 证书验证。
61
无法识别的传输编码
无法辨识的传输编码。
62
无效的LDAP URL
无效的LDAP URL。
63
文件超过最大大小
超过最大文件尺寸。
64
FTP失败
要求的FTP 的SSL 水平失败。
65
倒带操作失败
发送此数据需要的回卷(rewind)失败。
66
SSL引擎失败
初始化SSL 引擎失败。
67
服务器拒绝登录
用户名、密码或类似的信息未被接受,cURL 登录失败。
68
未找到文件
在TFTP 服务器上找不到文件。
69
无权限
TFTP 服务器权限有问题。
70
超出服务器磁盘空间
TFTP 服务器磁盘空间不足。
71
非法TFTP操作
非法的TFTP 操作。
72
未知TFTP传输的ID
未知TFTP 传输编号(ID)。
73
文件已经存在
文件已存在(TFTP) 。
74
错误TFTP服务器
无此用户(TFTP) 。
75
字符转换失败
字符转换失败。
76
必须记录回调
需要字符转换功能。
77
CA证书权限
读SSL 证书出现问题(路径?访问权限? ) 。
78
URL中引用资源不存在
URL 中引用的资源不存在。
79
错误发生在SSH会话
SSH 会话期间发生一个未知错误。
80
无法关闭SSL连接
未能关闭SSL 连接。
81
服务未准备
82
无法载入CRL文件
无法加载CRL 文件,丢失或格式不正确(在7.19.0版中增加) 。
83
发行人检查失败
签发检查失败(在7.19.0版中增加) 。
memcacheQ是一个单纯的分布式消息队列服务。
一,MEMCACHEQ的应用背景
Web应用中为什
么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too manyconnections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。在Web2.0的时代,高并发的情况越来越常见,从而使消息队列有成为居家必备的趋势,相应的也涌现出了很多实现方案,像Twitter以前就使用RabbitMQ实现消息队列服务,现在又转而使用Kestrel来实现消息队列服务,此外还有很多其他的选择,比如说:ActiveMQ,ZeroMQ等。
上述消息队列的软件中,大多为了实现AMQP,STOMP,XMPP之类的协议,变得极其重量级,但在很多Web应用中的实际情况是:我们只是想找到一个缓解高并发请求的解决方案,不需要杂七杂八的功能,一个轻量级的消息队列实现方式才是我们真正需要的。
二,MEMCACHEQ的特性
1 简单易用
2 处理速度快
3 多条队列
4 并发性能好
5 与memcache的协议兼容。这就意味着只要装了memcache的extension就可以了,不需要额外的插件。
三,安装
MEMCACHEQ依赖于libevent和BerkleyDB。
BerkleyDB用于持久化存储队列的数据。 这样在MEMCACHEQ崩溃或者服务器挂掉的时候,
不至于造成数据的丢失。这一点很重要,很重要。
它的安装依赖于BerkeleyDB 和 libevent,所以要先安装这BerkeleyDB和libevent:
其中libevent如果你安装过memcached就已经安装了,如果不确定,就检查一下吧
1. 先检查libevent, libevent-devel是否已经安装: rpm -qa|grep libevent 输出中必须包含libevent, libevent-deve, 如果缺失,使用以下命令安装:
yum install libevent yum
install libevent-devel
注意事项:libevent, libevent-devel优先使用yum安装源,光盘镜像中的rpm包安装,这样稳定性和兼容性可得到保证,网上流传的使用源码安装libevent的方法会有问题,因为很可能系统已经安装libevent, 再使用源码安装, 必然导致冲突,造成意外问题,所以一定要使用上述命令检查系统是否已经安装相应的库
2. 安装BerkleyDB
1.tar zxvf bdb-5.3.3.tar.gz
2.cd db-5.3.3/
#需要进入特定操作系统编译环境,更常规软件的编译有些区别
3.cd build_unix/
4. ../dist/configure --prefix=/usr/local/berkeleydb
#如果没有指定特殊安装路径,编译完成,需要将Berkeley Db运行库的路径添加到系统配置里面
echo "/usr/local/BerkeleyDB.5.3/lib/" >> /etc/ld.so.conf
#重载系统Ld运行库
ldconfig
5. make & make install
记得改/etc/ld.so.conf文件,添加/usr/local/BerkeleyDB.5.3/lib啊,不然后面的mcq会安装错误。
而BerkeleyDB就要去下载了
点击下载Berkeley DB 5.3.21.rar
下面安装memcacheq,
先下载一个memcacheq-0.2.0.rar
解压,进目录
./configure –with-bdb=/usr/local/BerkeleyDB.5.1 –with-libevent=/usr/local/lib –enable-threads
make
make install
关键是红色字体那一步,一定输入正确,不然make不通过,无法安装
下面是启动
memcacheq -d -r -u root -p21201 -H /data/memcacheq -N -v -L 1024 -B 1024 > /data/mq_error.log 2>&1
这里不推荐使用root用户,有些帖子里说不可以,我这里测试是可以的,不过可能会不安全。
1 下面是启动时候的参数
使用memcacheq -h 的命令来查看命令行选项
2 这个是正确的启动memcacheq:memcacheq -d -uroot -r -p11212 -H /home/wwwroot/mcq -N -R -v -L 1024 -B 1024 > /home/wwwlogs/mq_error.log 2 > &1
3 这个不知道为什么就不行/usr/local/memcacheq/bin/memcacheq -d -l 127.0.0.1 -A 8192 -H /data/memcacheq -B 65535 -N -R -u root
-p <num> TCP监听端口(default: 22201)
-U <num> UDP监听端口(default: 0, off)
-s <file> unix socket路径(不支持网络)
-a <mask> unix socket访问掩码(default 0700)
-l <ip_addr> 监听网卡
-d 守护进程
-r 最大化核心文件限制
-u <username> 以用户身份运行(only when run as root)
-c <num> 最大并发连接数(default is 1024)
-v 详细输出 (print errors/warnings while in event loop)
-vv 更详细的输出 (also print client commands/reponses)
-i 打印许可证信息
-P <file> PID文件
-t <num> 线程数(default 4)
--------------------BerkeleyDB Options-------------------------------
-m <num> BerkeleyDB内存缓存大小, default is 64MB
-A <num> 底层页面大小, default is 4096, (512B ~ 64KB, power-of-two)
-H <dir> 数据库家目录, default is '/data1/memcacheq'
-L <num> 日志缓冲区大小, default is 32KB
-C <num> 多少秒checkpoint一次, 0 for disable, default is 5 minutes
-T <num> 多少秒memp_trickle一次, 0 for disable, default is 30 seconds
-S <num> 多少秒queue stats dump一次, 0 for disable, default is 30 seconds
-e <num> 达到缓存百分之多少需要刷新, default is 60%
-E <num> 一个单一的DB文件有多少页, default is 16*1024, 0 for disable
-B <num> 指定消息体的长度,单位字节, default is 1024
-D <num> 多少毫秒做一次死锁检测(deadlock detecting), 0 for disable, default is 100ms
-N 开启DB_TXN_NOSYNC获得巨大的性能改善, default is off
-R 自动删除不再需要的日志文件, default is off
测试
三、测试
1.telnet 10.218.31.121 22201
2.stats
2.stats queue
3.set q4 0 0 5
4 hello
5 get q4
6 stats queue
7 delete q4
如果set的时候补成功not_STORED的话,检查一下你的启动命令吧,参数没设置好,如果你是新手,干翠多看几个帖子,多尝试启动命令,换换参数,就行了
四,使用
使用以上命令启动mq后,(注意上面的-B参数表示messag的body长度不能超过1024 bytes),使用mq时只需要用到两个命令:set和get:
set <queue name> <flags> 0 <message_len>\r\n
<put your message body here>\r\n
STORED\r\n
get <queue name>\r\n
VALUE <queue name> <flags> <message_len>\r\n
<your message body will come here>\r\n
END\r\n
可以看到,和memcache协议基本一致,只是把key name换成queue name,而且在set的命令中,忽略了expire_time的参数。毕竟mq的数据存储是存在berkeleyDB中,做了持久化存储,没有内存的过期时间。
当使用set命令时,就向指定的消息队列中写入了一条新消息,也就是向BerkeleyDB中新insert了一条数据,当使用get命令时,就从 指定队列中取出一条新消息,也就是向BerkeleyDB中delete了一条数据。当使用stats查看一个指定队列时,可以看到这个队列一共接收了多 少消息,其中被取出了多少条。
示例:
fengbo@onlinegame-10-121:~$ telnet 127.0.0.1 22202
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]'.
set q4 0 0 5
hello
STORED
set q4 0 0 5
world
STORED
stats queue
STAT q4 2/0
END
get q4
VALUE q4 0 5
hello
END
stats queue
STAT q4 2/1
END
上面执行了两次set的命令,使用stats queue查看时,可以看到q4的队列中共有消息2条,已取出0条;当使用get取出第一条后,再此使用stats queue查看,q4中消息有2条,其中已取出1条。
PHP测试:
session_start();
$memcache_obj = new Memcache;
$memcache_obj->connect(‘127.0.0.1′, 11212) or die (“error”);
memcache_set($memcache_obj, ‘k',10, 0, 0);
echo “queue”.memcache_get($memcache_obj, ‘k');
memcache_close($memcache_obj);
注释:
这个时候会出现这样的问题
memcacheq: error while loading shared libraries: libdb-5.0.so: cannot open shared object file: No such file or directory
解决办法:在/usr/lib 下建个 libdb-5.0.so 软链就OK啦
ln -s /usr/local/BerkeleyDB.5.0/lib/libdb-5.0.so /usr/lib/
五,关闭memcacheQ
使用ps命令查查memcacheQ的进程:ps -ef|grep wuf,然后直接将进程kill掉.