内容へ移動
Ground Sunlight
Windowsで作る - PHPプログラミングの開発環境
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
php:7.2:ext:zmq
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== PHP7.2 ZeroMQのインストール ====== Version 7.2.22 --- [[http://www.y2sunlight.com|y2sunlight]] 2020-11-20 \\ [[php:top|PHPに戻る]] 関連記事 * [[php:7.2:httpd.conf|PHP7.2 Apache2の設定]] * [[php:7.2:php.ini|PHP7.2 php.iniの編集]] * [[php:7.2:ext:intl|PHP7.2 intlのインストール]] * PHP7.2 ZeroMQのインストール リンク * https://zeromq.org/ --- ZeroMQの本家 * http://wiki.zeromq.org/bindings:php --- ZeroMQのPHPバインディング * http://pecl.php.net/package/zmq/1.1.3/windows --- ZeroMQのダウンロード(PECL) * https://github.com/zeromq/php-zmq --- ZeroMQのphpソース(GitHub) > php7.3で動作するZeroMQのWinodwsバイナリはまだ公式には公開されていません。 > (2020/11/23現在) ---- ===== 概要 ===== PHPには拡張モジュールというものがあります。これはPHPの機能を拡張する為のもので、PHPエクステンションとも言われています。 XAMPPではいくつかの拡張モジュールがDLLとして同封されていますが、他のリポジトリからダウンロードすることも出来ます。拡張モジュールのリポジトリとしては [[https://pecl.php.net/|PECL (ピクル)]] が有名です。PECL は [[https://pear.php.net/|PEAR]] 同様に ''pecl'' コマンドを使ってインストールする方法が提供されていますが、Winodwsの場合は php.ini を編集し、手動でDLLを設置する方が一般的です。 本章では、PECL から拡張モジュールをインストールする方法を、[[https://zeromq.org/|ZeroMQ]]を例に説明します。 === ZeroMQ === ZeroMQ は、高性能の非同期メッセージングライブラリです。スペルはZMQ 、0MQとも書きます。 ZeroMQ は、TCP、プロセス内、プロセス間、マルチキャスト、WebSocketなどの様々なトランスポートで使用でき、pub/sub、request/reply、client/serverなどの一般的なメッセージング方式をサポートしいます。詳細はZeroMQの[[https://zeromq.org/get-started/|ドキュメント]]をご覧ください。 XAMPP 7.2.22 では ZeroMQ はDLLが同封されていないので、PECL からダウンロードする必要があります。 \\ ===== ダウンロードと配置 ===== PECL の ZeroMQ のダウンロードサイト( http://pecl.php.net/package/zmq/1.1.3/windows )にアクセスします。 [{{:php:7.2:ext:zmq:php-zmq01.png?nolink}}] ■ [DLL List] から [7.2 Thread Safe (TS) x64]を選択し、以下のファイルをダウンロードします。 <code> php_zmq-1.1.3-7.2-ts-vc15-x64.zip </code> === 配置 === ダウンロードしたファイルを解凍します。 <code> COPYING.LESSER.LIBZMQ libzmq.dll libzmq.pdb LICENSE LICENSE.LIBSODIUM php_zmq.dll php_zmq.pdb README.md </code> ''php_zmq.dll'' を以下にコピーします: <code> {XAMPP Install-Folder}\php\ext\php_zmq.dll </code> ''libzmq.dlll'' を以下にコピーします: <code> {XAMPP Install-Folder}\php\libzmq.dlll </code> \\ ===== php.iniの編集 ===== php.ini の中に、extensionディレクティブを使って php_zmq.dll を拡張モジュールとして追加します。extension の使い方は、本編の「[[php:7.2:ext:intl#extensionディレクティブについて|PHP7.2 intlのインストール]]」を参照して下さい。 {{fa>file-o}} ''{XAMPP Install Folder}\php\php.ini'' <code ini php.ini> ;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; ... ;ZQM php bainding extension=zmq </code> ''extension=zmq'' を書く場所はどこでも良いですが、ここでは ''Dynamic Extensions'' と書かれている場所の最後尾に追加しました。 ==== DLLの確認 ==== 外部からダウンロードした拡張モジュールのDLLを手動でインストールする場合は、設置場所を間違えたり、依存関係のある他のモジュールが不足していたりする場合が少なくありません。従って、拡張モジュールを使用する前に、正常にロードされているか否かを確認しておきます。 php.exeのあるフォルダに移動します (ここでは ''D:\usr\xampp7.2.22\php'' とします)。''deplister'' を使って php_zmq.dll の依存関係を確認してみます。''deplister'' は windowsの実行モジュールの依存関係をチェックするツールで、XAMPP では php.exe と一緒に配布されています。 <code dos> D:\usr\xampp7.2.22\php> deplister ext\php_zmq.dll php7ts.dll,OK libzmq.dll,OK KERNEL32.dll,OK VCRUNTIME140.dll,OK api-ms-win-crt-heap-l1-1-0.dll,OK api-ms-win-crt-runtime-l1-1-0.dll,OK </code> 全てにOKが表示されていたら依存しているモジュールは全て揃っていることが分かります。次に、正しくロードできているか否かを ''php -m'' を使って確認します。 <code dos> D:\usr\xampp7.2.22\php> php -m [PHP Modules] ... zmq ... </code> [PHP Modules] の中に zmq が含まれていたら正常にロードできています。 Apatchを再起動して下さい。 \\ ===== コード補完用スタブの設置 ===== EclipseなどのIDEで、ZeroMQ のコード補完ができない場合は、スタブを設置して使用します。スタブは以下のURLで公開されています。 * https://github.com/moriony/php-zmq-stubs プロジェクトフォルダに以下のcomposer.jsonを設置します。既に composer.json がある場合は、マージして下さい。 <code json composer.json> { "require-dev": { "moriony/php-zmq-stubs": "dev-master" } } </code> コマンドプロンプトで次のコマンドを実行します: <code dos> composer install --dev </code> Eclipseの場合は、ここで設置した ''{Project-Folder}/vendor/moriony/php-zmq-stubs'' をビルトパスに追加して下さい。 \\ ===== テストコード ===== ZeroMQのインストールが出来たので、request-reply パターンのソケットの動作テストを行ってみましょう。 サーバーは 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> ''ZMQSocket'' のコンストラクターで ソケットタイプ ''ZMQ::SOCKET_REP'' を使用している点に注意して下さい。''recv()'' でクライアントからのメッセージを待ち、受け取ると直ぐに、同じものをエコー( ''send($message)'' )します。 クライアントは、githubの例題には適当なものがなかったので、以下のように作りました。 <code php simple-client.php> <?php /* The client sends 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> サーバーが起動済なので、エコーは直ぐに返ってきます。 === request-reply パターン === 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://zeromq.org/socket-api/#request-reply-pattern --- Socket API: Request-reply pattern \\
php/7.2/ext/zmq.txt
· 最終更新: 2020/11/27 15:53 by
y2sunlight
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ