1. HTTPSQS 具有以下特征:
- 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。
- 非常快速,入队列、出队列速度超过10000次/秒。
- 高并发,支持上万的并发连接,C10K不成问题。
- 支持多队列。
- 单个队列支持的最大队列数量高达10亿条。
- 低内存消耗,海量数据存储,存储几十GB的数据只需不到100MB的物理内存缓冲区。
- 可以在不停止服务的情况下便捷地修改单个队列的最大队列数量。
- 可以实时查看队列状态(入队列位置、出队列位置、未读队列数量、最大队列数量)。
- 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。
- 查看队列内容时,支持多字符集编码。
- 源代码不超过800行,适合二次开发。
cd /var/www/com.bigood
sudo mkdir httpsqs
sudo chown -R www-data:www-data httpsqs/
cd httpsqs/
sudo wget https://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
sudo wget https://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz
sudo wget https://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz
sudo wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
2.2 安装 libevent-2.0.12-stable
sudo tar zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable/
sudo ./configure --prefix=/usr/local/libevent-2.0.12-stable/
sudo make
sudo make install
2.3 安装 tokyocabinet-1.4.47 (此步骤必须在安装tokyotyrant 之前。)
sudo tar zxvf tokyocabinet-1.4.47.tar.gz
cd tokyocabinet-1.4.47/
sudo ./configure --prefix=/usr/local/tokyocabinet-1.4.47/
tips: error1. configure: error: zlib.h is required
sudo apt-get install zlib1g-dev
tips: error2. configure: error: bzlib.h is required
sudo aptitude install libbz2-dev
sudo make
sudo make install
2.4 安装 tokyotyrant-1.1.41
sudo tar zxvf tokyotyrant-1.1.41.tar.gz
cd tokyotyrant-1.1.41/
sudo ./configure --prefix=/usr/local/tokyotyrant-1.1.41/ --with-tc=/usr/local/tokyocabinet-1.4.47/ --enable-lua
tips: configure: error: lua.h is required
sudo tar zxvf lua-5.3.0.tar.gz
cd lua-5.3.0/
sudo make linux
tips: lua.c:80:31: fatal error: readline/readline.h: No such file or directory
sudo apt-get install libreadline6 libreadline6-dev
sudo wget http://www.lua.org/ftp/lua-5.3.0.tar.gz
sudo make
sudo make install
2.5 安装 httpsqs 1.7 (httpsqs -h 查看是否安装成功)
sudo tar zxvf httpsqs-1.7.tar.gz
cd httpsqs-1.7/
sudo make
sudo make install
2.6 安装 php 扩展。
sudo tar zxvf php_httpsqs_client_0.2.1.tar.gz
sudo mkdir php_httpsqs_client
sudo mv php_httpsqs_client_0.2.1.tar.gz php_httpsqs_client
cd php_httpsqs_client/
sudo tar zxvf php_httpsqs_client_0.2.1.tar.gz
sudo apt-get install php5-dev
sudo ./configure --enable-httpsqs --with-php-config=/usr/bin/php-config5
sudo make
sudo make install
cd /etc/php5/mods-available/
sudo vi httpsqs.ini
extension=httpsqs.so;
cd /etc/php5/conf.d/
sudo ln -s ../mods-available/httpsqs.ini 30-httpsqs.ini
sudo service php5-fpm restart
2.7 使用(创建一个队列,查看监听端口的情况,停止服务)
httpsqs -l 127.0.0.1 -d -p 1218 -x /var/www/httpsqs-data -a abv
sudo netstat -anp | grep 1218
sudo killall httpsqs
<?php
include_once("httpsqs_client.php");
$httpsqs = new httpsqs($httpsqs_host, $httpsqs_port, $httpsqs_auth, $httpsqs_charset);
/*
1. 将文本信息放入一个队列(注意:如果要放入队列的PHP变量是一个数组,需要事先使用序列化、json_encode等函数转换成文本)
如果入队列成功,返回布尔值:true
如果入队列失败,返回布尔值:false
*/
$result = $httpsqs->put($queue_name, $queue_data);
/*
2. 从一个队列中取出文本信息
返回该队列的内容
如果没有未被取出的队列,则返回文本信息:HTTPSQS_GET_END
如果发生错误,返回布尔值:false
*/
$result = $httpsqs->get($queue_name);
/*
3. 从一个队列中取出文本信息和当前队列读取点Pos
返回数组示例:array("pos" => 7, "data" => "text message")
如果没有未被取出的队列,则返回数组:array("pos" => 0, "data" => "HTTPSQS_GET_END")
如果发生错误,返回布尔值:false
*/
$result = $httpsqs->gets($queue_name);
/*
4. 查看队列状态(普通方式)
*/
$result = $httpsqs->status($queue_name);
/*
5. 查看队列状态(JSON方式)
返回示例:{"name":"queue_name","maxqueue":5000000,"putpos":130,"putlap":1,"getpos":120,"getlap":1,"unread":10}
*/
$result = $httpsqs->status_json($queue_name);
/*
6. 查看指定队列位置点的内容
返回指定队列位置点的内容。
*/
$result = $httpsqs->view($queue_name, $queue_pos);
/*
7. 重置指定队列
如果重置队列成功,返回布尔值:true
如果重置队列失败,返回布尔值:false
*/
$result = $httpsqs->reset($queue_name);
/*
8. 更改指定队列的最大队列数量
如果更改成功,返回布尔值:true
如果更改操作被取消,返回布尔值:false
*/
$result = $httpsqs->maxqueue($queue_name, $num);
/*
9. 修改定时刷新内存缓冲区内容到磁盘的间隔时间
如果更改成功,返回布尔值:true
如果更改操作被取消,返回布尔值:false
*/
$result = $httpsqs->synctime($num);