php-fpm應用與php-swoole應用進行通信

2023-11-01    分類: 網站建設

基礎要求

  • linux萬物皆文件

  • socket通信

  • 基礎進制轉換

寫在前面

這篇文章是自己練習的內容,主要想實現應用間的通信機制。

Workerman中提供的建議方案

與其它mvc框架結合建議以上圖的方式(ThinkpHp為例):

1、ThinkpHp與Workerman是兩個獨立的系統,獨立部署(可部署在不同服務器),互不干擾。

2、ThinkpHp以HTTp協議提供網頁頁面在瀏覽器渲染展示。

3、ThinkpHp提供的頁面的js發起websocket連接,連接workerman

4、連接后給Workerman發送一個數據包(包含用戶名密碼或者某種token串)用于驗證websocket連接屬于哪個用戶。

5、僅在ThinkpHp需要向瀏覽器推送數據時,才調用workerman的socket接口推送數據。

6、其余請求還是按照原本ThinkpHp的HTTp方式調用處理。

總結:

把Workerman作為一個可以向瀏覽器推送的通道,僅僅在需要向瀏覽器推送數據時才調用Workerman接口完成推送。業務邏輯全部在ThinkpHp中完成。

我們使用swoole環境的常駐內存、協程特性來做一些其他事務,如:任務隊列及其消費、緩存、異步執行等情況時

可以如建議中第5步所說,FpM環境調用Swoole環境提供的接口(可以用TCp/HTTp等方式)來開始一個任務

進程通信

上面的方案可以用在單機中,也可以用在集群部署中。

進程通信一般僅限于單機中使用

進程通信的方式有好幾種,這里主要寫明我測試的一種。

unix socket 文件

在linux環境中,萬物皆為文件,套接字也可以用文件來表示,然后一個進程(一般是swoole環境)監聽它,其他進程(FpM環境)連接它,并且發送數據

這里使用的是Easyswoole框架提供的一個基類,如果是純Swoole環境可以下載框架源碼并查看原理

EasySwoole部分

繼承了 AbstractUnixprocess ,封裝好了很多內容,直接寫明onAccept 接受數據做處理即可

 \;

 \\\\;
 \\;

   
{

     (Socket $socket)
    {
        
        $header = $socket->recvAll(, );

         (strlen($header) != ) {
            $socket->sendAll(::pack(json_encode([
                 => ,
                 => ,
            ], )));
            $socket->close();
            ;
        }

        
        
        $allLength = ::packDataLength($header);
        $data = $socket->recvAll($allLength, );
         (strlen($data) == $allLength) {
             $data;

            

            $socket->sendAll(::pack(json_encode([
                 => ,
                 => ,
            ], )));
            $socket->close();
        }{

            $socket->sendAll(::pack(json_encode([
                 => ,
                 => ,
            ], )));
            $socket->close();
        }
    }

      ($string)
    {
         pack(, strlen($string)) . $string;
    }

      ($head)
    {
         unpack(, $head)[];
    }
}

寫好了任務邏輯,還需要加入啟動該進程

EasySwooleEvent.php文件
       (EventRegister $register)
    {
        $config =  UnixprocessConfig();
        $config->setSocketFile(EASYSWOOLE_ROOT.);
        $config->setprocessName();

        $siam =  Siam($config);
        ServerManager::getInstance()->getSwooleServer()->addprocess($siam->getprocess());
    }

普通環境發送數據

$sock = dirname().;

$unixSock = stream_socket_client(.$sock);

fwrite($unixSock, siam_pack());



fclose($unixSock);




 ($string)
{
     pack(, strlen($string)) . $string;
}

 ($head)
{
     unpack(, $head)[];
}

當前題目:php-fpm應用與php-swoole應用進行通信
文章轉載:http://m.kartarina.com/news3/291903.html

成都網站建設公司_創新互聯,為您提供云服務器、網站導航品牌網站設計、品牌網站制作、外貿建站、企業建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司
主站蜘蛛池模板: 亚洲人片在线观看天堂无码 | 少妇无码AV无码专区在线观看| 无码AV中文字幕久久专区| 亚洲av永久无码精品秋霞电影影院 | 亚州AV综合色区无码一区| 亚洲中文字幕无码日韩| 无码人妻一区二区三区在线水卜樱| 亚洲伊人成无码综合网| 亚洲熟妇无码八V在线播放| 亚洲精品人成无码中文毛片| 色综合久久无码中文字幕| 一级毛片中出无码| 亚洲熟妇无码八V在线播放| 国产精品亚洲аv无码播放| 人妻中文字幕AV无码专区| 一本大道无码av天堂| 无码午夜人妻一区二区三区不卡视频 | av区无码字幕中文色| 亚洲av永久无码精品天堂久久| 无码午夜人妻一区二区三区不卡视频 | 麻豆精品无码国产在线果冻| 中文字幕无码精品亚洲资源网久久| 亚洲精品无码99在线观看 | 无码人妻精品丰满熟妇区| 无码人妻熟妇AV又粗又大| 亚洲日韩欧洲无码av夜夜摸| 久久亚洲av无码精品浪潮| 四虎成人精品无码永久在线| 东京热人妻无码人av| 亚洲人成人无码网www电影首页| 东京热av人妻无码| 午夜寂寞视频无码专区| 无码人妻aⅴ一区二区三区有奶水| 高清无码午夜福利在线观看| 67194成l人在线观看线路无码| 亚洲国产成人精品无码一区二区| 久久久久久人妻无码| 国产精品无码素人福利免费| 色综合久久久无码中文字幕| 好爽毛片一区二区三区四无码三飞| 蜜臀AV无码精品人妻色欲|