ホームページ  >  記事  >  PHPフレームワーク  >  swooleプロセス間で通信する方法

swooleプロセス間で通信する方法

(*-*)浩
(*-*)浩オリジナル
2019-12-02 14:19:132837ブラウズ

swooleプロセス間で通信する方法

#Swoole のプロセス間通信方法

Pipe パイプ

Pipe はプロセス間で使用されますデータ対話では、Linux システム自体が、半二重通信パイプラインを作成するためのパイプ機能を提供します。半二重通信方式では、データは一方向にしか流れず(一方は読み取りのみ、もう一方は書き込みのみ)、関係のあるプロセス(親子プロセス)間でのみ使用できます。 (推奨学習:

swoole ビデオ チュートリアル )

パイプはプロセス間通信 IPC の最も基本的な方法であり、名前付きパイプと匿名パイプの 2 種類があります。

匿名パイプ: 血縁関係のあるプロセス間のデータ転送を完了するために特別に使用されます。名前付きパイプ: 任意の 2 つのプロセス間で使用できます。Swoole のパイプは匿名パイプです。

eventfd と UnixSock を使用して Swoole で 2 種類のパイプをカプセル化し、プロセス間の通信をより柔軟にします。

Swoole の Process モジュールには、プロセス間通信用のパイプラインが組み込まれています。Process インスタンスを構築するとき、$pipe_type オプションがオンになっている限り、Swoole の最下層は自動的にここで説明する必要がある場合、名前上はパイプと呼ばれていますが、新バージョンの Swoole の基盤となる通信は実際には UnixSock を介して実装されているため、本当の意味での Linux パイプではありません。

作成プロセス

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

パイプ タイプ $pipe_type は 3 つのタイプに分類できます。

0 は、パイプ タイプを作成しないことを意味します。 Pipe

1 は SOCK_STREAM タイプのパイプを作成することを意味します

2 は SOCK_DGRAM タイプのパイプを作成することを意味します

$redirect_stdin_stdout が有効な場合、$pipe_type オプションはユーザー パラメータを無視し、 1に強制されます。

パイプ記述子

プロセスがフォークされると、親プロセスと子プロセスの Process オブジェクトには、pipe という名前のメンバー変数が設定されます。親プロセスと子プロセスは、このパイプ記述子を通じてデータを送信したり、Process が提供する読み取り/書き込みインターフェイスを直接呼び出してデータを送受信したりできます。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。