メインメニュー
XAMPP アレンジ
IED
WSL2
-
道具箱
リポジトリ編
フレームワーク編
公開ソフトウェア
メタ
リンク
- PHP ライブラリ
- PHP 言語
php:7.2:ext:zmqPHP7.2 ZeroMQのインストール
Version 7.2.22 — y2sunlight 2020-11-20
関連記事
- 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として同封されていますが、他のリポジトリからダウンロードすることも出来ます。拡張モジュールのリポジトリとしては PECL (ピクル) が有名です。PECL は PEAR 同様に
pecl
コマンドを使ってインストールする方法が提供されていますが、Winodwsの場合は php.ini を編集し、手動でDLLを設置する方が一般的です。本章では、PECL から拡張モジュールをインストールする方法を、ZeroMQを例に説明します。
ZeroMQ
ZeroMQ は、高性能の非同期メッセージングライブラリです。スペルはZMQ 、0MQとも書きます。
ZeroMQ は、TCP、プロセス内、プロセス間、マルチキャスト、WebSocketなどの様々なトランスポートで使用でき、pub/sub、request/reply、client/serverなどの一般的なメッセージング方式をサポートしいます。詳細はZeroMQのドキュメントをご覧ください。
XAMPP 7.2.22 では ZeroMQ はDLLが同封されていないので、PECL からダウンロードする必要があります。
ダウンロードと配置
PECL の ZeroMQ のダウンロードサイト( http://pecl.php.net/package/zmq/1.1.3/windows )にアクセスします。
■ [DLL List] から [7.2 Thread Safe (TS) x64]を選択し、以下のファイルをダウンロードします。
php_zmq-1.1.3-7.2-ts-vc15-x64.zip
配置
ダウンロードしたファイルを解凍します。
COPYING.LESSER.LIBZMQ libzmq.dll libzmq.pdb LICENSE LICENSE.LIBSODIUM php_zmq.dll php_zmq.pdb README.md
php_zmq.dll
を以下にコピーします:{XAMPP Install-Folder}\php\ext\php_zmq.dll
libzmq.dlll
を以下にコピーします:{XAMPP Install-Folder}\php\libzmq.dlll
php.iniの編集
php.ini の中に、extensionディレクティブを使って php_zmq.dll を拡張モジュールとして追加します。extension の使い方は、本編の「PHP7.2 intlのインストール」を参照して下さい。
{XAMPP Install Folder}\php\php.ini
- php.ini
;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; ... ;ZQM php bainding extension=zmq
extension=zmq
を書く場所はどこでも良いですが、ここではDynamic Extensions
と書かれている場所の最後尾に追加しました。DLLの確認
外部からダウンロードした拡張モジュールのDLLを手動でインストールする場合は、設置場所を間違えたり、依存関係のある他のモジュールが不足していたりする場合が少なくありません。従って、拡張モジュールを使用する前に、正常にロードされているか否かを確認しておきます。
php.exeのあるフォルダに移動します (ここでは
D:\usr\xampp7.2.22\php
とします)。deplister
を使って php_zmq.dll の依存関係を確認してみます。deplister
は windowsの実行モジュールの依存関係をチェックするツールで、XAMPP では php.exe と一緒に配布されています。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
全てにOKが表示されていたら依存しているモジュールは全て揃っていることが分かります。次に、正しくロードできているか否かを
php -m
を使って確認します。D:\usr\xampp7.2.22\php> php -m [PHP Modules] ... zmq ...
[PHP Modules] の中に zmq が含まれていたら正常にロードできています。
Apatchを再起動して下さい。
コード補完用スタブの設置
EclipseなどのIDEで、ZeroMQ のコード補完ができない場合は、スタブを設置して使用します。スタブは以下のURLで公開されています。
プロジェクトフォルダに以下のcomposer.jsonを設置します。既に composer.json がある場合は、マージして下さい。
- composer.json
{ "require-dev": { "moriony/php-zmq-stubs": "dev-master" } }
コマンドプロンプトで次のコマンドを実行します:
composer install --dev
Eclipseの場合は、ここで設置した
{Project-Folder}/vendor/moriony/php-zmq-stubs
をビルトパスに追加して下さい。
テストコード
ZeroMQのインストールが出来たので、request-reply パターンのソケットの動作テストを行ってみましょう。
サーバーは GitHub(zeromq/php-zmq) のサンプルを使用します。
- 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); }
ZMQSocket
のコンストラクターで ソケットタイプZMQ::SOCKET_REP
を使用している点に注意して下さい。recv()
でクライアントからのメッセージを待ち、受け取ると直ぐに、同じものをエコー(send($message)
)します。クライアントは、githubの例題には適当なものがなかったので、以下のように作りました。
- 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();
ZMQSocket
のコンストラクターで ソケットタイプZMQ::SOCKET_REQ
を使用している点(サーバー側はZMQ::SOCKET_REP
でした)に注意して下さい。起動されると直ぐに、メッセージをsend()
して、recv()
でサーバーからのメッセージを待ちます。ZeroMQの特徴なのですが、
send()
はサーバーが起動するまでリトライを続けます。コードが出来たら、コマンドプロンプトを2つ起動し、プロジェクトフォルダに移動してクライアントを起動します。
> php simple-client.php
クライアントは、サーバーが起動しエコーバックされるのを待ちます。
別のコマンドプロンプトからサーバーを起動します。
> php simple-server.php Got message: Hello
サーバーは、起動直後、クライアントにメッセージを返し、クライアントは終了します。
もう一度、クライアントを起動します(今度は「Hi!」と送ってみましょう)。
> php simple-client.php Hi! Hi!
サーバーが起動済なので、エコーは直ぐに返ってきます。
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
コメント
https://www.mlbbaseballjerseys.us.org/ https://www.jerseyswholesale.com.co/ https://www.footballstore.us.com/ https://www.nflfootballjerseysnew.us.com/ https://www.officialbaseballjerseys.us.com/ https://www.jerseyscheap.com.co/ https://www.officialmlbstore.us.com/ https://www.nflgearuniforms.us/ https://www.nbastores.com.co/ https://www.mlbjerseysforcheap.us.com/ https://www.cheap-jerseyswholesale.com.co/ https://www.mlbjerseyswholesalecheap.us.com/ https://www.footballjerseys.com.co/ https://www.hockeyjerseyscheap.us/ https://www.cheapjerseyssale.us.org/ https://www.nflfanshop.com.co/ https://www.footballjerseyscheapest.us.com/ https://www.baseballjerseyssale.us.com/ https://www.jerseysforcheapwholesale.us/ https://www.hockeyjerseyswholesale.us.com/ https://www.cheapjerseysfromchinawholesale.com.co/ https://www.cheapfootballjerseysfromchina.us.com/ https://www.nfl-shop.com.co/ https://www.nflstoreonlineshopping.us/ https://www.nflfootballjerseys.com.co/ https://www.baseballjerseyscheap.us.com/ https://www.cheapnfljerseysfromchina.com.co/ https://www.mlbbaseballjerseyscheap.us.com/ https://www.cheaphockeyjerseys.us.com/ https://www.bestnfljerseyscheap.us.com/ https://www.footballproshop.us.com/ https://www.nbashop.us.org/ https://www.nfljerseysofficialshop.us/ https://www.nflstores.com.co/ https://www.footballstores.us.com/ https://www.baseballjerseyscheapwholesale.us.com/ https://www.officialnfljersey.us.com/ https://www.cheapbaseballjerseyswholesale.us.com/ https://www.basketballjerseyswholesale.us/ https://www.cheapbasketballjerseyswholesale.us.com/ https://www.newfootballjerseys.us.com/ https://www.bestfootballjerseys.us.com/ https://www.baseball-jerseys.us.com/ https://www.cheapjerseysfromchinawholesale.com/ https://www.jerseyswholesaleforcheap.us.com/ https://www.nfljerseyscheap.com.co/ https://www.wholesalecheapjerseysfromchina.us/ https://www.nbajerseysnew.us.com/ https://www.wholesalecheapjerseysshop.com.co/ https://www.wholesalefootballjerseyscheap.us.com/ https://www.cheapnfljerseyswholesale.com.co/ https://www.nhlstore.com.co/ https://www.wholesalejerseyscheapest.us.com/ https://www.cheapwholesalejerseys.com.co/ https://www.basketballjerseyscheapwholesale.us.com/ https://www.mlbshops.com.co/ https://www.baseballjerseyswholesale.us/ https://www.wholesalejerseysforcheap.com/ https://www.nflshop.com.co/ https://www.wholesalejerseyschina.com.co/ https://www.nflgear.com.co/ https://www.footballjerseysforcheap.us.com/ https://www.nhljerseysforcheap.us.com/ https://www.footballstoreonlineshopping.us.com/ https://www.cheapjerseyswholesalefreeshipping.com.co/ https://www.cheapestjerseysfromchinafactory.us.com/ https://www.basketballjerseyswholesale.us.com/ https://www.nflfootballjerseysforcheap.com/ https://www.nhljerseyscheapwholesale.us.com/ https://www.nflproshops.com.co/ https://jerseysforcheapwholesale.us.com/ https://www.nhlhockeyjerseyswholesale.us.com/ https://www.jerseyscheapwholesalefromchina.us.com/ https://www.officialfootballjerseys.us.com/ https://www.basketballapparel.us/ https://www.hockeystores.us.com/ https://www.cheap-nfljerseys.com.co/ https://www.nflfanshop.us.com/