[文章作者:孫立 連結:http://www.cnblogs.com/sunli/ 更新時間:2010-12-17]
項目來源
php語言是當前比較流行的一種web開發語言,它能夠實現快速開發,方便代碼發布和部署,效能也還不錯,但是隨著web的快速發展,一個網站往往是多種語言結合的模式。為了提高效能,各種語言之間的通訊往往會採用二進位,PHP雖然支援二進位,但是非常不方便,不能像java那種可以writeInt(int),writeLong(long)那樣方便的進行二進位操作,所以萌發了封裝一套php二進位操作類庫的想法。
PHPBuffer介紹
PHPBuffer是一個可以用於二進位序列化和還原序列化PHP資料和對象,並能跟其他語言進行相容通訊的PHP封裝類庫。比如你可以用PHP讀取其他語言寫的一個二進位檔案,也可以用PHP的socket協議跟其他語言進行方便的二進位通訊,比如ttserver的二進位協議。PHPBuffer項目地址:http://code.google.com/p/phpbuffer/
下面示範一下例子:
php對象的二進位序列化,可以把對象或者資料打包成二進位格式,他比json,內建的序列化佔用的空間更小,而且效能更高,
require 'class/BigEndianBytesBuffer.php';
class request {
public $width = 5;
public $height = 6;
private $buffer;
public function __construct() {
$this->buffer = new BigEndianBytesBuffer ( );
}
public function tobytes() {
$this->buffer->clear ();
$this->buffer->writeInt ( $this->width );//寫入int
$this->buffer->writeInt ( $this->height ); //寫入int
return $this->buffer;
}
}
socket的二進位通訊,可以方便的與java等第三方語言通訊,通過封裝,可以快速開發,不易出錯。
$this->fd = new BigEndianSocketBuffer ( $host, $port );
$this->fd->writeChar ( 0xC8 );//寫一個4bitchar
$this->fd->writeChar ( 0xa0 );//寫一個4bit char
echo "\r\nstarted at:$rts\r\n";
$this->fd->writeLong ( $rts );//寫一個64bit長整型
$this->fd->writeInt ( $sid );//寫一個32bit整形
$this->fd->readInt (); //讀取一個32bit 整形
從上面的代碼,也許你看出來,開發二進位的讀寫程式非常的方便。
ttserver複製協議實現
在前面的部落格中我提過ttserver的複製協議,同樣,我們通過PHPBuffer可以方便的實現ttserver複製協議,可以方便的即時的把ttserver的資料複製到mysql,搜尋引擎,其他nosql資料庫,還可以用來更新cache的到期,也可以用來做高速隊列。(在idata資料庫大會上我示範過)。代碼地址:http://phpbuffer.googlecode.com/svn/trunk/ttserver.php
前兩天看到有朋友正在做類似的工作,見:http://www.cnblogs.com/sunyongyue/archive/2010/12/14/repl_from_tt_to_mysql.html ,我相信,這些功能的實現,對很多朋友是有意義的。
還未完成的功能
目前只是提供了BigEnddian模式的封裝,還沒有實現LittleEndian模式的封裝。如果你有興趣,你可以加入進來一起完善。