-
游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。
赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!
TheHackerWorld官方
- 0
赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!
TheHackerWorld官方
问题
HACK1949
基于HTTP协议的轻量级简单队列服务-HTTPSQS
行列(Queue)又称先进先出表(First In First Out),即先进入行列的元素,先从行列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。运用音讯行列能够很好地异步处理数据传送和存储,当你频频地向数据库中刺进数据、频频地向搜索引擎提交数据,就可采取音讯行列来异步刺进。别的,还能够将较慢的处理逻辑、有并发数量约束的处理逻辑,通过音讯行列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。
HTTPSQS具有以下特征
HTTPQS1.7压力测验:
选用Apache ab指令进行压力测验,敞开10个线程,放入10万条文本数据(每条512字节)到行列中:
运用HTTP Keep-Alive时:23018 requests/sec
封闭HTTP Keep-Alive时:11840 requests/sec
选用Apache ab指令进行压力测验,敞开10个线程,从行列中取出10万条文本数据(每条512字节):
运用HTTP Keep-Alive时:25982 requests/sec
封闭HTTP Keep-Alive时:13294 requests/sec
详细测验内容:http://code.google.com/p/httpsqs/wiki/BenchmarkTest
出产环境运用:在金山游戏官网中,新闻、论坛帖子、客服布告、SNS社区等产生的增、删、改操作,文本内容实时写入HTTPSQS行列,全站搜索引擎增量索引准实时(1分钟内)更新的数据源取自HTTPSQS。HTTPSQS 2009年12月18日上线至今,运转稳定,既有来自Web服务器的入行列操作,也有来自指令行脚本的批量入、出行列操作。
HTTPSQS编译装置
HTTPSQS软件包等都是放在了https://code.google.com/archive/p/httpsqs/downloads下,一般情况下无法网站无法打卡,这里供给百度网盘下载链接。
软件包:百度网盘暗码:3uml
留意:HTTPSQS与所需求的依靠包具有强依靠性,必须是指定的版别,不要为了求新装置最新的依靠包,否则在装置httpsqs时会报错
ulimit -SHn 65535 # 切换到资源包目录 cd /usr/local/src wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz tar zxvf libevent-2.0.12-stable.tar.gz cd libevent-2.0.12-stable/ ./configure --prefix=/usr/local/libevent-2.0.12-stable/ make && make install cd ../ wget http://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz tar zxvf tokyocabinet-1.4.47.tar.gz cd tokyocabinet-1.4.47/ ./configure --prefix=/usr/local/tokyocabinet-1.4.47/ make && make install cd ../ wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz tar zxvf httpsqs-1.7.tar.gz cd httpsqs-1.7/ make && make install
HTTPSQS服务器运用文档
示例:
请运用指令“killall httpsqs”、“pkill httpsqs”和“kill cat /tmp/httpsqs.pid”来中止httpsqs。
留意:请不要运用指令“pkill -9 httpsqs”和“kill -9 httpsqs的进程ID”来结束httpsqs,否则,内存中没有保存到磁盘的数据将会丢失。
HTTPSQS客户端运用文档
入行列(将文本音讯放入行列):
HTTP GET协议(以curl指令为例)
示例:
假如如行列成功,回来:
假如如行列失利,回来:
假如行列已满,回来:
从HTTPSQS 1.2版别开端,在回来给客户端的HTTP Header头中增加了一行“Pos: xxx”,输出当时行列的读取方位点,例如:
HTTP POST协议(以curl指令为例)
出行列(从行列中取出文本音讯)
HTTP GET协议(以curl指令为例)
以浏览器为例
回来音讯行列的内容给客户端。
假如没有未取出的音讯行列,则回来:
从HTTPSQS 1.2版别开端,在回来给客户端的HTTP Header头中增加了一行“Pos: xxx”,输出当时行列的读取方位点,例如:
参数charset说明(例如:/?charset=utf-8):
指定HTTP输出Header头的字符编码,即:
Content-Type: text/plain; charset=utf-8
任何在IANA注册的字符编码均可运用,但是,并不是所有的浏览器都能解析全部的字符编码。关于中文,常用的字符编码有:utf-8、gb2312、gbk、gb18030、big5等。
检查行列状况(一般方法,便于浏览器检查)
HTTP GET 协议(以curl指令为例)
示例
假如“行列写入点值”大于“最大行列数量值”,将重置“行列写入点”为1,即又从1开端存储新的行列内容,掩盖本来行列方位点的内容:
检查行列状况(JSON方法,便于程序处理回来内容)
从HTTPSQS 1.3版别开端支撑此功用。
HTTP GET 协议(以curl指令为例):
回来(示例):
假如“行列写入点值”大于“最大行列数量值”,将重置“行列写入点”为1,即又从1开端存储新的行列内容,掩盖本来行列方位点的内容:
检查指定行列方位点的内容
跟一般的行列体系不同的是,HTTPSQS 能够检查指定行列ID(行列点)的内容,包含未出、已出的行列内容。能够方便地观测进入行列的内容是否正确。
别的,假定有一个发送手机短信的行列,由客户端看护进程从行列中取出信息,并调用“短信网关接口”发送短信。但是,假如某段时刻“短信网关接口”有毛病,而这段时刻行列方位点300~900的信息现已出行列,但是发送短信失利,我们还能够在方位点300~900被掩盖前,检查到这些方位点的内容,作相应的处理。
HTTP GET 协议(以curl指令为例):
pos >=1 而且 <= 1000000000
回来指定行列方位点的内容。
重置指定行列
HTTP GET 协议(以curl指令为例):
假如重置成功,回来:
假如重置失利,回来:
更改指定行列的最大行列数量
默许的最大行列长度(100万条):1000000
HTTP GET 协议(以curl指令为例)
num >=10 而且 <= 1000000000
假如更改最大行列数量成功,则回来:
更改的最大行列数量必须大于当时的“行列写入点”。别的,当“行列写入点”小于“行列读取点”时(即PUT坐落圆环的第二圈,而GET坐落圆环的第一圈时),本操作将被撤销,然后回来给客户端以下信息:
不中止服务的情况下,修正守时改写内存缓冲区内容到磁盘的距离时刻
从HTTPSQS 1.3版别开端支撑此功用。
默许距离时刻:5秒 或 httpsqs -s参数设置的值。
HTTP GET 协议(以curl指令为例):
num >=1 and <= 1000000000
假如修正距离时刻成功,则回来:
假如 num 不在 1 ~ 1000000000 之间,本操作将被撤销,然后回来给客户端以下信息:
暗码校验失利
从HTTPSQS 1.5版别开端支撑此功用。
假如暗码校验失利(/?auth=xxx),将回来以下信息:
大局过错
假如产生大局过错(即指令、参数过错等),将回来以下信息:
PHP客户端说明文档
(1) PHP客户端扩展(第三方供给,详情请拜访:http://code.google.com/p/php-httpsqs-client/)
(2) PHP客户端Class文件(官方供给:适用于HTTPSQS1.7以上版别,推荐运用,源码包也在上面的百度网盘里)
require_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);
HTTPSQS出产环境典型运用案例架构
一个选用PHP编写的HTTPSQS客户端简略看护进程框架如下:
环境,假定PHP装置途径为/usr/local/webserver/php,运用PHP编写一个文件/opt/httpsqs_client_daemon.php:
require_once dirname(__FILE__)."/httpsqs_client.php"; $httpsqs = new httpsqs($host, $port, $auth, $charset); while(true) { $result = $httpsqs->gets($name); $pos = $result["pos"]; //当时行列音讯的读取方位点 $data = $result["data"]; //当时行列音讯的内容 if ($data != "HTTPSQS_GET_END" && $data != "HTTPSQS_ERROR") { ...去做运用操作... } else { sleep(1); //暂停1秒钟后,再次循环 } }
在Linux下,推送到后台履行即可:
链接帖子
意见的链接
分享到其他网站
这个问题有0个答案
推荐的帖子