<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          foolsockPHP TCP 長(zhǎng)連接擴(kuò)展

          聯(lián)合創(chuàng)作 · 2023-10-01 09:36

          foolsock 是為了實(shí)現(xiàn) RPC 通信中 TCP 長(zhǎng)連接而開(kāi)發(fā)的 PHP 擴(kuò)展

          簡(jiǎn)介

          PHP 很多項(xiàng)目隨著業(yè)務(wù)規(guī)模的增長(zhǎng)(尤其是終端眾多的情況下)逐漸向服務(wù)化演變,常見(jiàn)的一種架構(gòu)模型是將相對(duì)獨(dú)立或者比較耗時(shí)的業(yè)務(wù)抽象為單獨(dú)的服 務(wù)(如用戶模塊)使用c/c++、golang等更高效的語(yǔ)言處理,具體的業(yè)務(wù)層(如:網(wǎng)頁(yè)端、移動(dòng)端)來(lái)調(diào)用各個(gè)服務(wù),這種架構(gòu)大大降低了各業(yè)務(wù)之間的 耦合度,同時(shí)最大限度的提高了模塊的重用性。

          struct

          業(yè)務(wù)層與后端的服務(wù)之間的通信協(xié)議中,http并不是一種高效的rpc協(xié)議。事實(shí)上php中有眾多的擴(kuò)展可以為我們提供很好的范例,如:mysql、memcached等等都是最常見(jiàn)不過(guò)的"服務(wù)"了,我們完全可以采用它們的客戶端處理方式。

          mysql、memcached這些擴(kuò)展都是采用TCP與服務(wù)端進(jìn)行通信,你肯定記得他們都有長(zhǎng)連接的連接方式,有興趣的同學(xué)可以去翻一下它們的源碼。

          如果像mysql、memcached那樣將協(xié)議的處理也封裝在php擴(kuò)展中,那么意味著每增加一個(gè)服務(wù)我們都需要安裝一個(gè)擴(kuò)展,這樣將很不利于維護(hù),同時(shí)也會(huì)降低開(kāi)發(fā)效率。

          foolsock對(duì)socket進(jìn)行了一層簡(jiǎn)單的封裝,將連接放在persistent_list哈希表中,每個(gè)fastcgi進(jìn)程連接后不會(huì)被釋放,下次請(qǐng)求時(shí)直接使用。目前最大的連接數(shù)等于fastcgi進(jìn)程數(shù),當(dāng)然你也可以自行修改下實(shí)現(xiàn)連接池的效果。

          使用foolsock可以將協(xié)議相關(guān)的邏輯也使用php實(shí)現(xiàn),可以大大降低開(kāi)發(fā)成本,foolsock/example/memcache_client.php提供了一個(gè)簡(jiǎn)單的memcache客戶端的示例。

          安裝

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

          使用

          <?php
          $sock = new FoolSock(string $host,int $port);
          //connect
          $r = $sock->pconnect([ int $timeoutms ]);  //超時(shí)時(shí)間,單位:毫秒
          if(false === $r){
              exit();
          }
          
          //write
          $sock->write(string $msg);//返回false時(shí)可以調(diào)用$sock->pclose()關(guān)閉再重連$sock->pconnect()
          
          //read
          $sock0->read(int $read_buf_size); //超時(shí)時(shí)間大于0時(shí)如果read無(wú)數(shù)據(jù)返回此操作將會(huì)阻塞直至超時(shí)

          示例

          example/memcache_client.php提供了一個(gè)簡(jiǎn)單的memcache客戶端的例子(使用memcache二進(jìn)制協(xié)議),實(shí)現(xiàn)memcache兩個(gè)基本操作:Add/Get,經(jīng)過(guò)測(cè)試處理效率與使用memcache擴(kuò)展相當(dāng)

          瀏覽 20
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆人妻精品无码区 | 蜜桃视频一区二区三区四区a v | 美女日逼豆花视频 | 视频乱伦毛片 | 成人AV高清无码在线观 |