PHP TCP長串連擴充:foolsock

來源:互聯網
上載者:User
foolsock 是為了實現 RPC 通訊中 TCP 長串連而開發的 PHP 擴充

簡介

PHP 很多項目隨著業務規模的增長(尤其是終端眾多的情況下)逐漸向服務化演變,常見的一種架構模型是將相對獨立或者比較耗時的業務抽象為單獨的服 務(如使用者模組)使用c/c++、golang等更高效的語言處理,具體的業務層(如:網頁端、移動端)來調用各個服務,這種架構大大降低了各業務之間的 耦合度,同時最大限度的提高了模組的重用性。

業務層與後端的服務之間的通訊協定中,http並不是一種高效的rpc協議。事實上php中有眾多的擴充可以為我們提供很好的範例,如:mysql、memcached等等都是最常見不過的"服務"了,我們完全可以採用它們的用戶端處理方式。

mysql、memcached這些擴充都是採用TCP與服務端進行通訊,你肯定記得他們都有長串連的串連方式,有興趣的同學可以去翻一下它們的源碼。

如果像mysql、memcached那樣將協議的處理也封裝在php擴充中,那麼意味著每增加一個服務我們都需要安裝一個擴充,這樣將很不利於維護,同時也會降低開發效率。

foolsock對socket進行了一層簡單的封裝,將串連放在persistent_list雜湊表中,每個fastcgi進程串連後不會被釋放,下次請求時直接使用。目前最大的串連數等於fastcgi進程數,當然你也可以自行修改下實現串連池的效果。

使用foolsock可以將協議相關的邏輯也使用php實現,可以大大降低開發成本,foolsock/example/memcache_client.php提供了一個簡單的memcache用戶端的樣本。

安裝

從github下載源碼後解壓cd foolsockphpize./configuremake && make install最後將extension=foolsock.so加入php.ini,重啟php-fpm或者其他fastcgi

使用

pconnect([ int $timeoutms ]);  //逾時時間,單位:毫秒if(false === $r){    exit();}//write$sock->write(string $msg);//返回false時可以調用$sock->pclose()關閉再重連$sock->pconnect()//read$sock0->read(int $read_buf_size); //逾時時間大於0時如果read無資料返回此操作將會阻塞直至逾時

樣本

example/memcache_client.php提供了一個簡單的memcache用戶端的例子(使用memcache二進位協議),實現memcache兩個基本操作:Add/Get,經過測試處理效率與使用memcache擴充相當。

項目首頁:http://www.open-open.com/lib/view/home/1441013134862

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.