このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
php:7.2:ext:zmq [2020/11/24 10:30] y2sunlight |
php:7.2:ext:zmq [2020/11/24 20:53] y2sunlight [テストコード] |
||
---|---|---|---|
行 25: | 行 25: | ||
PHPには拡張モジュールというものがあります。これはPHPの機能を拡張する為のもので、PHPエクステンションとも言われています。 | PHPには拡張モジュールというものがあります。これはPHPの機能を拡張する為のもので、PHPエクステンションとも言われています。 | ||
- | XAMPPではいくつかの拡張モジュールがDLLとして同封されていますが、他のリポジトリからダウンロードすることも出来ます。 | + | XAMPPではいくつかの拡張モジュールがDLLとして同封されていますが、他のリポジトリからダウンロードすることも出来ます。拡張モジュールのリポジトリとしては [[https:// |
- | + | ||
- | 拡張モジュールのリポジトリとしては [[https:// | + | |
本章では、PECL から拡張モジュールをインストールする方法を、[[https:// | 本章では、PECL から拡張モジュールをインストールする方法を、[[https:// | ||
行 47: | 行 45: | ||
■ [DLL List] から [7.2 Thread Safe (TS) x64]を選択し、以下のファイルをダウンロードします。 | ■ [DLL List] から [7.2 Thread Safe (TS) x64]を選択し、以下のファイルをダウンロードします。 | ||
- | * php_zmq-1.1.3-7.2-ts-vc15-x64.zip | + | < |
+ | php_zmq-1.1.3-7.2-ts-vc15-x64.zip | ||
+ | </ | ||
=== 配置 === | === 配置 === | ||
行 92: | 行 92: | ||
</ | </ | ||
- | '' | + | '' |
==== DLLの確認 ==== | ==== DLLの確認 ==== | ||
- | 外部からダウンロードした拡張モジュールのDLLを手動でインストールする場合は、設置場所を間違えたり依存関係のある他のモジュールが不足していたりする場合が少なくありません。従って、拡張モジュールを使用する前に、正常にロードされているか否かを確認しておきます。 | + | 外部からダウンロードした拡張モジュールのDLLを手動でインストールする場合は、設置場所を間違えたり、依存関係のある他のモジュールが不足していたりする場合が少なくありません。従って、拡張モジュールを使用する前に、正常にロードされているか否かを確認しておきます。 |
php.exeのあるフォルダに移動します (ここでは '' | php.exeのあるフォルダに移動します (ここでは '' | ||
行 155: | 行 155: | ||
- | ===== テスト ===== | + | ===== テストコード |
- | > TODO | + | ZeroMQのインストールが出来たので、request-reply パターンのソケットの動作テストを行ってみましょう。 |
- | <code php sample1.php> | + | |
+ | サーバーは GitHub(zeromq/ | ||
+ | |||
+ | * https:// | ||
+ | |||
+ | <code php simple-server.php> | ||
+ | <?php | ||
+ | /* | ||
+ | The server waits for messages from the client | ||
+ | and echoes back the received message | ||
+ | */ | ||
+ | $server = new ZMQSocket(new ZMQContext(), | ||
+ | $server-> | ||
+ | |||
+ | /* Loop receiving and echoing back */ | ||
+ | while ($message = $server-> | ||
+ | echo "Got message: $message\n"; | ||
+ | /* echo back the message */ | ||
+ | $server-> | ||
+ | } | ||
</ | </ | ||
- | > TODO | + | '' |
- | <code php sample2.php> | + | |
+ | クライアントは、githubの例題には適当なものがなかったので、以下のように作りました。 | ||
+ | |||
+ | <code php simple-client.php> | ||
+ | <?php | ||
+ | /* | ||
+ | The client sends a message to the server | ||
+ | */ | ||
+ | $message = count($argv)> | ||
+ | |||
+ | /* Create a socket */ | ||
+ | $queue = new \ZMQSocket(new \ZMQContext(), | ||
+ | $queue-> | ||
+ | $queue-> | ||
+ | |||
+ | $queue-> | ||
+ | echo $queue-> | ||
</ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | ZeroMQの特徴なのですが、'' | ||
+ | |||
+ | コードが出来たら、コマンドプロンプトを2つ起動し、プロジェクトフォルダに移動してクライアントを起動します。 | ||
+ | |||
+ | <code dos> | ||
+ | > php simple-client.php | ||
+ | </ | ||
+ | |||
+ | クライアントは、サーバーが起動しエコーバックされるのを待ちます。 | ||
+ | |||
+ | 別のコマンドプロンプトからサーバーを起動します。 | ||
+ | |||
+ | <code dos> | ||
+ | > php simple-server.php | ||
+ | Got message: Hello | ||
+ | </ | ||
+ | |||
+ | サーバーは、起動直後、クライアントにメッセージを返し、クライアントは終了します。 | ||
+ | |||
+ | もう一度、クライアントを起動します(今度は「Hi!」と送ってみましょう)。 | ||
+ | |||
+ | <code dos> | ||
+ | > php simple-client.php Hi! | ||
+ | Hi! | ||
+ | </ | ||
+ | |||
+ | サーバーが起動済なので、エコーは直ぐに返ってきます。 | ||
+ | |||
+ | === request-reply パターン === | ||
+ | |||
+ | request-reply パターンは、クライアントをサービスに接続します。これは、リモートプロシージャコールと同じです。同期('' | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
\\ | \\ | ||