Swoole進程間通信的方式 管道pipe 管道用於進程之間的數據交互,Linux系統本身提供了pipe函數用於創建一個半雙工通信管道。半雙工的通信方式中數據只能單向流動(一端只讀一端只寫),只能在具有親緣關係(父子進程)的進程之間使用。 管道是進程間通信IPC中最基礎的方式,管道有兩種類型分別是命 ...
Swoole進程間通信的方式
管道pipe
管道用於進程之間的數據交互,Linux系統本身提供了pipe函數用於創建一個半雙工通信管道。半雙工的通信方式中數據只能單向流動(一端只讀一端只寫),只能在具有親緣關係(父子進程)的進程之間使用。
管道是進程間通信IPC中最基礎的方式,管道有兩種類型分別是命名管道、匿名管道。
匿名管道:專門用於具有血緣關係的進程之間,完成數據傳遞。命名管道:可以用在任何兩個進程之間,Swoole中的管道都是匿名管道。
在Swoole中利用eventfd和UnixSock封裝了兩種管道,使得進程之間的通信更加靈活。
Swoole的Process模塊內置了管道的方式用於進程間通信,在構建Process實例時只要開啟了$pipe_type選項,Swoole底層會自動創建一個管道,這裡需要說明的時,雖然名字上叫做管道,但實際上在新版Swoole中底層通信是通過UnixSock實現的,所以並不是真正意義上的Linux Pipe。
創建進程
管道類型$pipe_type可分為三種:
0表示不創建管道
1表示創建SOCK_STREAM類型的管道
2表示創建SOCK_DGRAM類型的管道
當啟用$redirect_stdin_stdout後,$pipe_type選項將忽略用戶參數,強製為1。
管道描述符
當進程被fork出來後,父進程和子進程中的Process對象會被設置上一個名為pipe的成員變數,存放著底層UnixSocket的描述符,父進程和子進程可以通過這個管道描述符來發送數據,也可以直接調用Process提供的read/write介面來收發數據。
管道讀寫
swoole_process->write(string $data) 向進程的管道中寫入數據
swoole_process->read(int $buffer_size = 8192) 從進程的管道中讀取數據
以上就是swoole進程間如何通信的詳細內容,更多請關註我吧
有需要學習交流的友人請加入Swoole交流群的咱們一起,有問題一起交流,一起進步!前提是你是學技術的。感謝閱讀!