安装:
在安装httpsqs之前要安装
- libevent-2.0.12-stable.tar.gz和okyocabinet-1.4.47.tar.gz
- ulimit -SHn 65535
1、安装libevent-2.0.12-stable.tar.gz
- 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 ../
安装tokyocabinet-1.4.47.tar.gz
- 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/
- #注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure --enable-off64代替./configure,可以使数据库文件突破2GB的限制。
- #./configure --enable-off64 --prefix=/usr/local/tokyocabinet-1.4.47/
- make
- make install
- cd ../
当执行第二步骤的会出错,是由于缺少bzip2-1.0.6.tar.gz
下面进行安装
- http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz安装开始;
- wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
- tar -xvzf bzip2-1.0.6.tar.gz
- cd bzip2-1.0.6.
- make
- make install
在重复安装tokyocabinet-1.4.47.tar.gz还是失败,由于缺少zlib-1.2.5.tar.gz
下面进行安装
- http://www.winimage.com/zLibDll/zlib-1.2.5.tar.gz安装开始;
- wget http://www.winimage.com/zLibDll/zlib-1.2.5.tar.gz
- tar -xvzf zlib-1.2.5.tar.gz
- cd zlib-1.2.5.
- ./configure
- make
- sudo make instal
继续第2步骤 OK
3、安装httpsqs-1.7.tar.gz
- 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
- 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; } } ?>