安装:

  

在安装httpsqs之前要安装

  1. libevent-2.0.12-stable.tar.gz和okyocabinet-1.4.47.tar.gz
  1. ulimit -SHn 65535

1、安装libevent-2.0.12-stable.tar.gz

  1. wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz##下载
  2. tar zxvf libevent-2.0.12-stable.tar.gz##解压
  3. cd libevent-2.0.12-stable/
  4. ./configure --prefix=/usr/local/libevent-2.0.12-stable/
  5. make
  6. make install
  7. cd ../

安装tokyocabinet-1.4.47.tar.gz

  1. wget http://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz
  2. tar zxvf tokyocabinet-1.4.47.tar.gz
  3. cd tokyocabinet-1.4.47/
  4. ./configure --prefix=/usr/local/tokyocabinet-1.4.47/
  5. #注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure --enable-off64代替./configure,可以使数据库文件突破2GB的限制。
  6. #./configure --enable-off64 --prefix=/usr/local/tokyocabinet-1.4.47/
  7. make
  8. make install
  9. cd ../

当执行第二步骤的会出错,是由于缺少bzip2-1.0.6.tar.gz

下面进行安装

  1. http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz安装开始;
  2. wget  http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
  3. tar -xvzf bzip2-1.0.6.tar.gz
  4. cd bzip2-1.0.6.
  5. make
  6. make install

在重复安装tokyocabinet-1.4.47.tar.gz还是失败,由于缺少zlib-1.2.5.tar.gz

下面进行安装

  1. http://www.winimage.com/zLibDll/zlib-1.2.5.tar.gz安装开始;
  2. wget  http://www.winimage.com/zLibDll/zlib-1.2.5.tar.gz
  3. tar -xvzf zlib-1.2.5.tar.gz
  4. cd zlib-1.2.5.
  5. ./configure
  6. make
  7. sudo make instal

继续第2步骤 OK

3、安装httpsqs-1.7.tar.gz

  1. wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
  2. tar zxvf httpsqs-1.7.tar.gz
  3. cd httpsqs-1.7/
  4. make
  5. make install
  6. cd ../
<?php
/*
----------------------------------------------------------------------------------------------------------------
HTTP Simple Queue Service - httpsqs client class for PHP v1.7.1Author: Zhang Yan (http://blog.s135.com), E-mail: net@s135.com
This is free software, and you are welcome to modify and redistribute it under the New BSD License
----------------------------------------------------------------------------------------------------------------
Useage:
<?php
include_once("httpsqs_client.php");
$httpsqs = new httpsqs($httpsqs_host, $httpsqs_port, $httpsqs_auth, $httpsqs_charset);
$result = $httpsqs->put($queue_name, $queue_data); //1. PUT text message into a queue. If PUT successful, return boolean: true. If an error occurs, return boolean: false. If queue full, return text: HTTPSQS_PUT_END
$result = $httpsqs->get($queue_name); //2. GET text message from a queue. Return the queue contents. If an error occurs, return boolean: false. If there is no unread queue message, return text: HTTPSQS_GET_END
$result = $httpsqs->gets($queue_name); //3. GET text message and pos from a queue. Return example: array("pos" => 7, "data" => "text message"). If an error occurs, return boolean: false. If there is no unread queue message, return: array("pos" => 0, "data" => "HTTPSQS_GET_END")
$result = $httpsqs->status($queue_name); //4. View queue status
$result = $httpsqs->status_json($queue_name); //5. View queue status in json. Return example: {"name":"queue_name","maxqueue":5000000,"putpos":130,"putlap":1,"getpos":120,"getlap":1,"unread":10}
$result = $httpsqs->view($queue_name, $queue_pos); //6. View the contents of the specified queue pos (id). Return the contents of the specified queue pos.
$result = $httpsqs->reset($queue_name); //7. Reset the queue. If reset successful, return boolean: true. If an error occurs, return boolean: false
$result = $httpsqs->maxqueue($queue_name, $num); //8. Change the maximum queue length of per-queue. If change the maximum queue length successful, return boolean: true. If  it be cancelled, return boolean: false
$result = $httpsqs->synctime($num); //9. Change the interval to sync updated contents to the disk. If change the interval successful, return boolean: true. If  it be cancelled, return boolean: false
?>
----------------------------------------------------------------------------------------------------------------*/class Httpsqs
{public $httpsqs_host;public $httpsqs_port;public $httpsqs_auth;public $httpsqs_charset;public function __construct($host='127.0.0.1', $port=1218, $auth='', $charset='utf-8') {$this->httpsqs_host = $host;$this->httpsqs_port = $port;$this->httpsqs_auth = $auth;$this->httpsqs_charset = $charset;return true;}public function http_get($query){$socket = fsockopen($this->httpsqs_host, $this->httpsqs_port, $errno, $errstr, 5);if (!$socket){return false;}$out = "GET ${query} HTTP/1.1\r\n";$out .= "Host: {$this->httpsqs_host}\r\n";$out .= "Connection: close\r\n";$out .= "\r\n";fwrite($socket, $out);$line = trim(fgets($socket));$header = $line;list($proto, $rcode, $result) = explode(" ", $line);$len = -1;$pos_value  = 0;while (($line = trim(fgets($socket))) != ""){$header .= $line;if (strstr($line, "Content-Length:")){list($cl, $len) = explode(" ", $line);}if (strstr($line, "Pos:")){list($pos_key, $pos_value) = explode(" ", $line);}   if (strstr($line, "Connection: close")){$close = true;}}if ($len < 0){return false;}$body = fread($socket, $len);$fread_times = 0;while(strlen($body) < $len){$body1 = fread($socket, $len);$body .= $body1;unset($body1);if ($fread_times > 100) {break;}$fread_times++;}//if ($close) fclose($socket);fclose($socket);$result_array["pos"] = (int)$pos_value;$result_array["data"] = $body;return $result_array;}public function http_post($query, $body){$socket = fsockopen($this->httpsqs_host, $this->httpsqs_port, $errno, $errstr, 1);if (!$socket){return false;}$out = "POST ${query} HTTP/1.1\r\n";$out .= "Host: {$this->httpsqs_host}\r\n";$out .= "Content-Length: " . strlen($body) . "\r\n";$out .= "Connection: close\r\n";$out .= "\r\n";$out .= $body;fwrite($socket, $out);$line = trim(fgets($socket));$header = $line;list($proto, $rcode, $result) = explode(" ", $line);$len = -1;while (($line = trim(fgets($socket))) != ""){$header .= $line;if (strstr($line, "Content-Length:")){list($cl, $len) = explode(" ", $line);}if (strstr($line, "Pos:")){list($pos_key, $pos_value) = explode(" ", $line);}   if (strstr($line, "Connection: close")){$close = true;}}if ($len < 0){return false;}$body = @fread($socket, $len);//if ($close) fclose($socket);fclose($socket);$result_array["pos"] = (int)$pos_value;$result_array["data"] = $body;return $result_array;}public function put($queue_name, $queue_data){$result = $this->http_post("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=put", $queue_data);if ($result["data"] == "HTTPSQS_PUT_OK") {return true;} else if ($result["data"] == "HTTPSQS_PUT_END") {return $result["data"];}return false;}public function get($queue_name){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=get");if ($result == false || $result["data"] == "HTTPSQS_ERROR" || $result["data"] == false) {return false;}return $result["data"];}public function gets($queue_name){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=get");if ($result == false || $result["data"] == "HTTPSQS_ERROR" || $result["data"] == false) {return false;}return $result;} public function status($queue_name){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=status");if ($result == false || $result["data"] == "HTTPSQS_ERROR" || $result["data"] == false) {return false;}return $result["data"];}public function view($queue_name, $queue_pos){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=view&pos=".$pos);if ($result == false || $result["data"] == "HTTPSQS_ERROR" || $result["data"] == false) {return false;}return $result["data"];}public function reset($queue_name){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=reset");if ($result["data"] == "HTTPSQS_RESET_OK") {return true;}return false;}public function maxqueue($queue_name, $num){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=maxqueue&num=".$num);if ($result["data"] == "HTTPSQS_MAXQUEUE_OK") {return true;}return false;}public function status_json($queue_name){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=".$queue_name."&opt=status_json");if ($result == false || $result["data"] == "HTTPSQS_ERROR" || $result["data"] == false) {return false;}return $result["data"];}public function synctime($num){$result = $this->http_get("/?auth=".$this->httpsqs_auth."&charset=".$this->httpsqs_charset."&name=httpsqs_synctime&opt=synctime&num=".$num);if ($result["data"] == "HTTPSQS_SYNCTIME_OK") {return true;}return false;}
}
?>

  

转载于:https://www.cnblogs.com/canbefree/p/4126808.html

httpsqs消息队列相关推荐

  1. 一个轻便易用的消息队列

    PS:工作的时候遇到一个需要更新几千万关键词的热度等属性的功能,最开始使用普通的for循环,但是这个方法明显的不理想,后来想到使用消息队列,因为之前从来没有使用过消息队列,所以临时网上去找一些常用的消 ...

  2. C#实现异步消息队列

    C#实现异步消息队列 原文:C#实现异步消息队列 拿到新书<.net框架设计>,到手之后迅速读了好多,虽然这本书不像很多教程一样从头到尾系统的讲明一些知识,但是从项目实战角度告诉我们如何使 ...

  3. 扫盲消息队列 | 消息中间件 | Kafka

    先吐槽 我真的写技术文章写到怀疑人生,我翻看历史发文记录,只要我一本正经的写的技术文章,都没人看,但是!一发闲扯淡的内容,阅读量肯定是技术文的好几倍(读者爸爸们别这么搞嘛) 这说明啥?说明学习还是太枯 ...

  4. 消息队列中间件 Message Queue 简称:MQ

    一.什么是消息队列? 消息队列,一般我们会简称它为MQ(Message Queue) 队列是一种先进先出的数据结构. 现有常用的开源消息中间件有Kafka.CMQ.JBoss Messaging.JO ...

  5. 消息队列——维基百科

    消息队列 在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自使用者.消息队列提供了异步的通信协议, ...

  6. 踩个脚印,记录一个短小精干的消息队列的项目地址

    [文章作者:张宴 本文版本:v1.0 最后修改:2010.03.18 转载请注明原文链接:http://blog.s135.com/httpsqs_1_2/ ] HTTPSQS(HTTP Simple ...

  7. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)

    Redis 的列表是链表而不是数组.这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n). 当列表弹出了最后一个元素之后,该数据结构自动被删除, ...

  8. 2021年大数据Kafka(一):❤️消息队列和Kafka的基本介绍❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 消息队列和Kafka的基本介绍 一.什么是消息队列 二.消息队列的应用场景 ...

  9. java多线程消息队列_java多线程消息队列的实现

    1.定义一个队列缓存池: private static List queueCache = new LinkedList(); 2.定义队列缓冲池最大消息数,如果达到该值,那么队列检入将等待检出低于该 ...

最新文章

  1. Android 自定义View —— Canvas
  2. [小明学算法]3.启发式搜索算法----A*算法之我见
  3. 面向对象的C语言开发框架:Nesty
  4. 使用tab键分割的文章能快速转换成表格。( )_Word 多级列表编号方法总结(一)——快速入门
  5. python socket服务器_python网络编程学习笔记(三):socket网络服务器
  6. oracle日志查看问题?
  7. 反向传播算法带动了业界使用两层神经网络研究的热潮
  8. 【蓝桥杯单片机组模块】15、PWM学习(总结版)
  9. 微信小程序uniapp实现小图标转成SVN代码
  10. 打印预览的线条粗细问题
  11. 一元四次方程求根实现
  12. 我的Bug日常:spark基于yarn运行时抛错,内存不足Required executor memory (1024 MB), offHeap memory (0) MB。问题已解决,亲测有用~~~
  13. exe4j将jar包转成exe文件
  14. 【算法设计与分析】C++回溯法求全排列
  15. 岁末忆今朝,辞旧话新潮——心灵与技术的聚合
  16. 计算机博后 国外招聘,全额奖学金机会,香港理工计算机系博后/博士/研究助理招收中...
  17. 阿拉德之怒怎么用电脑玩 阿拉德之怒手游模拟器教程
  18. 我爬取了猪八戒网站的信息,发现了程序员做威客不得不进的坑
  19. java 坦克机器人_[转]人工智能 Java 坦克机器人系列: 神经网络,下部
  20. 量化投资策略实时监控系统

热门文章

  1. 1.初学MVC3学习笔记1
  2. SharePoint视图过滤中People字段的局限
  3. 水晶报表-简单数据类型(Crystal 语法)
  4. SELECT语句,去除某个字段的重复信息
  5. Linux下的 FTP
  6. Java这些多线程基础知识你会吗?
  7. webservice 基本要点
  8. Spring-Boot + AOP实现多数据源动态切换
  9. Linux系统(五)负载均衡LVS集群之DR模式
  10. Android2.2 API 中文文档系列(3) —— AccessibilityService