首頁 >php框架 >Swoole >swoole進程間如何通信

swoole進程間如何通信

(*-*)浩
(*-*)浩原創
2019-12-02 14:19:133013瀏覽

swoole進程間如何通信

Swoole進程間通訊的方式

#管道pipe

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

swoole視訊教學

管道是進程間通訊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進程間如何通信的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:swoole能做什麼下一篇:swoole能做什麼