Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


php:7.2:ext:zmq

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
最新のリビジョン 両方とも次のリビジョン
php:7.2:ext:zmq [2020/11/24 11:05]
y2sunlight [テスト]
php:7.2:ext:zmq [2020/11/24 20:56]
y2sunlight [テストコード]
行 25: 行 25:
 PHPには拡張モジュールというものがあります。これはPHPの機能を拡張する為のもので、PHPエクステンションとも言われています。 PHPには拡張モジュールというものがあります。これはPHPの機能を拡張する為のもので、PHPエクステンションとも言われています。
  
-XAMPPではいくつかの拡張モジュールがDLLとして同封されていますが、他のリポジトリからダウンロードすることも出来ます。 +XAMPPではいくつかの拡張モジュールがDLLとして同封されていますが、他のリポジトリからダウンロードすることも出来ます。拡張モジュールのリポジトリとしては [[https://pecl.php.net/|PECL (ピクル)]] が有名です。PECL は [[https://pear.php.net/|PEAR]] 同様に ''pecl'' コマンドを使ってインストールする方法が提供されていますが、Winodwsの場合は php.ini を編集し、手動でDLLを設置する方が一般的です。
- +
-拡張モジュールのリポジトリとしては [[https://pecl.php.net/|PECL (ピクル)]] が有名です。PECL は [[https://pear.php.net/|PEAR]] 同様に ''pecl'' コマンドを使ってインストールする方法が提供されていますが、Winodwsの場合は php.ini を編集し、手動でDLLを設置する方が一般的です。+
  
 本章では、PECL から拡張モジュールをインストールする方法を、[[https://zeromq.org/|ZeroMQ]]を例に説明します。 本章では、PECL から拡張モジュールをインストールする方法を、[[https://zeromq.org/|ZeroMQ]]を例に説明します。
行 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 をダウンロード+<code> 
 +php_zmq-1.1.3-7.2-ts-vc15-x64.zip 
 +</code>
  
 === 配置 === === 配置 ===
行 92: 行 92:
 </code> </code>
  
-''extension=zmq'' を書く場所はどこでも良いですが、ここでは ''Dynamic Extensions'' と書かれている場所の最後尾に書きました。+''extension=zmq'' を書く場所はどこでも良いですが、ここでは ''Dynamic Extensions'' と書かれている場所の最後尾に追加しました。
  
 ==== DLLの確認 ==== ==== DLLの確認 ====
  
-外部からダウンロードした拡張モジュールのDLLを手動でインストールする場合は、設置場所を間違えたり依存関係のある他のモジュールが不足していたりする場合が少なくありません。従って、拡張モジュールを使用する前に、正常にロードされているか否かを確認しておきます。+外部からダウンロードした拡張モジュールのDLLを手動でインストールする場合は、設置場所を間違えたり依存関係のある他のモジュールが不足していたりする場合が少なくありません。従って、拡張モジュールを使用する前に、正常にロードされているか否かを確認しておきます。
  
 php.exeのあるフォルダに移動します (ここでは ''D:\usr\xampp7.2.22\php'' とします)。''deplister'' を使って php_zmq.dll の依存関係を確認してみます。''deplister'' は windowsの実行モジュールの依存関係をチェックするツールで、XAMPP では php.exe と一緒に配布されています。 php.exeのあるフォルダに移動します (ここでは ''D:\usr\xampp7.2.22\php'' とします)。''deplister'' を使って php_zmq.dll の依存関係を確認してみます。''deplister'' は windowsの実行モジュールの依存関係をチェックするツールで、XAMPP では php.exe と一緒に配布されています。
行 155: 行 155:
  
  
-===== テスト =====+===== テストコード =====
  
-ZeroMQのインストールが出来たので、request-reply パターンのソケットを作って動作テストを行ってみましょう。+ZeroMQのインストールが出来たので、request-reply パターンのソケット動作テストを行ってみましょう。
  
-<code php sample1.php>+サーバーは GitHub(zeromq/php-zmq) のサンプルを使用します。 
 + 
 +  * https://github.com/zeromq/php-zmq/blob/master/examples/simple-server.php 
 + 
 +<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(), ZMQ::SOCKET_REP); 
 +$server->bind("tcp://127.0.0.1:5555"); 
 + 
 +/* Loop receiving and echoing back */ 
 +while ($message = $server->recv()) { 
 +    echo "Got message: $message\n"; 
 +    /* echo back the message */ 
 +    $server->send($message); 
 +}
 </code> </code>
  
-TODO +''ZMQSocket'' のコンストラクターで ソケットタイプ ''ZMQ::SOCKET_REP'' を使用している点に注意して下さい。''recv()'' でクライアントからのメッセージを待ち、受け取ると直ぐに、同じものをエコー( ''send($message)'' )します。 
-<code php sample2.php>+ 
 +クライアントは、githubの例題には適当なものがなかったので、以下のように作りました。 
 + 
 +<code php simple-client.php
 +<?php 
 +/* 
 +    The client sends a message to the server 
 +*/ 
 +$message = count($argv)>1 ? $argv[1] : 'Hello'; 
 + 
 +/* Create a socket */ 
 +$queue = new \ZMQSocket(new \ZMQContext(), \ZMQ::SOCKET_REQ); 
 +$queue->connect("tcp://127.0.0.1:5555"); 
 +$queue->setSockOpt (ZMQ::SOCKOPT_LINGER, 1000); 
 + 
 +$queue->send($message); 
 +echo $queue->recv(); 
 +</code
 + 
 +''ZMQSocket'' のコンストラクターで ソケットタイプ ''ZMQ::SOCKET_REQ'' を使用している点(サーバー側は''ZMQ::SOCKET_REP''でした)に注意して下さい。起動されると直ぐに、メッセージを ''send()'' して、''recv()'' でサーバーからのメッセージを待ちます。 
 + 
 +ZeroMQの特徴なのですが、''send()'' はサーバーが起動するまでリトライを続けます。 
 + 
 +コードが出来たら、コマンドプロンプトを2つ起動し、プロジェクトフォルダに移動してクライアントを起動します。 
 + 
 +<code dos> 
 +php simple-client.php 
 +</code> 
 + 
 +クライアントは、サーバーが起動しエコーバックされるのを待ちます。 
 + 
 +別のコマンドプロンプトからサーバーを起動します。 
 + 
 +<code dos> 
 +> php simple-server.php 
 +Got message: Hello 
 +</code> 
 + 
 +サーバーは、起動直後、クライアントにメッセージを返し、クライアントは終了します。 
 + 
 +もう一度、クライアントを起動します(今度は「Hi!」と送ってみましょう)。 
 + 
 +<code dos> 
 +> php simple-client.php Hi! 
 +Hi!
 </code> </code>
  
 +サーバーが起動済なので、エコーは直ぐに返ってきます。
  
 === request-reply パターン === === request-reply パターン ===
  
-クライアントのセットをサービスのセットに接続します。これは、リモートプロシージャコールまたはタスクの分散パターンと同じです。同期(''REQ'' 及び ''REP'' ソケットタイプ)と非同期ソケットタイプ(''DEALER'' 及び ''ROUTER'' ソケットタイプ)の2つの基本的な種類があり、ここでは同期タイプを使用しています。詳しくは以下のドキュメントをご覧ください。+request-reply パターンは、クライアントをサービスに接続します。これは、リモートプロシージャコールと同じです。同期(''REQ'' 及び ''REP'' ソケットタイプ)と非同期ソケットタイプ(''DEALER'' 及び ''ROUTER'' ソケットタイプ)の2つの基本的な種類があり、ここでは同期タイプを使用しています。詳しくは以下のドキュメントをご覧ください。
  
   * https://zguide.zeromq.org/docs/chapter1/#Ask-and-Ye-Shall-Receive --- ZeroMQガイド: Ask and Ye Shall Receive   * https://zguide.zeromq.org/docs/chapter1/#Ask-and-Ye-Shall-Receive --- ZeroMQガイド: Ask and Ye Shall Receive
php/7.2/ext/zmq.txt · 最終更新: 2020/11/27 15:53 by y2sunlight