• httpsqs消息队列


    安装:

        

    在安装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.1
    
    Author: 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
    ";
            $out .= "Host: {$this->httpsqs_host}
    ";
            $out .= "Connection: close
    ";
            $out .= "
    ";
            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
    ";
            $out .= "Host: {$this->httpsqs_host}
    ";
            $out .= "Content-Length: " . strlen($body) . "
    ";
            $out .= "Connection: close
    ";
            $out .= "
    ";
            $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;
        }
    }
    ?>
    

      

  • 相关阅读:
    bzoj2115: [Wc2011] Xor
    bzoj2844: albus就是要第一个出场
    hdu3949
    bzoj2487: Super Poker II
    bzoj3456: 城市规划
    bzoj3992: [SDOI2015]序列统计
    ubuntu 使用命令行登录oracle
    ubuntu安装docker
    linux查询硬件信息
    ubuntu oracle 环境搭建
  • 原文地址:https://www.cnblogs.com/canbefree/p/4126808.html
Copyright © 2020-2023  润新知