溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swoole進程間怎么通信

發布時間:2020-12-18 10:18:55 來源:億速云 閱讀:192 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關swoole進程間怎么通信的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

Swoole進程間通信的方式

管道pipe

管道用于進程之間的數據交互,Linux系統本身提供了pipe函數用于創建一個半雙工通信管道。半雙工的通信方式中數據只能單向流動(一端只讀一端只寫),只能在具有親緣關系(父子進程)的進程之間使用。

管道是進程間通信IPC中最基礎的方式,管道有兩種類型分別是命名管道、匿名管道。

匿名管道:專門用于具有血緣關系的進程之間,完成數據傳遞。命名管道:可以用在任何兩個進程之間,Swoole中的管道都是匿名管道。

在Swoole中利用eventfd和UnixSock封裝了兩種管道,使得進程之間的通信更加靈活。

Swoole的Process模塊內置了管道的方式用于進程間通信,在構建Process實例時只要開啟了$pipe_type選項,Swoole底層會自動創建一個管道,這里需要說明的時,雖然名字上叫做管道,但實際上在新版Swoole中底層通信是通過UnixSock實現的,所以并不是真正意義上的Linux Pipe。

創建進程

swoole_process::__construct(
callable $function, 
bool $redirect_stdin_stdout = false, 
int $pipe_type = SOCK_DGRAM, 
bool $enable_coroutine = false
);

管道類型$pipe_type可分為三種:

0表示不創建管道

1表示創建SOCK_STREAM類型的管道

2表示創建SOCK_DGRAM類型的管道

當啟用$redirect_stdin_stdout后,$pipe_type選項將忽略用戶參數,強制為1。

管道描述符

當進程被fork出來后,父進程和子進程中的Process對象會被設置上一個名為pipe的成員變量,存放著底層UnixSocket的描述符,父進程和子進程可以通過這個管道描述符來發送數據,也可以直接調用Process提供的read/write接口來收發數據。

object(Swoole\Process)#1 (6) {
  ["pipe"]=>int(4)
  ["callback"]=>NULL
  ["msgQueueId"]=>NULL
  ["msgQueueKey"]=>NULL
  ["pid"]=>int(287)
  ["id"]=>NULL}

管道讀寫

swoole_process->write(string $data) 向進程的管道中寫入數據

swoole_process->read(int $buffer_size = 8192) 從進程的管道中讀取數據

感謝各位的閱讀!關于swoole進程間怎么通信就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女