メッセージキュー-ZeroMQのインストールについて
3897 ワード
ZeroMQ-The Intelligent Transport Layer(インテリジェントなトランスポート層パッケージ)
1,埋め込み可能なネットワークライブラリというよりは同時のsocketフレームワーク2,クラスタ上でTCPよりも高速3,メッセージはinpro,IPC,TCPおよびブロードキャスト方式で4,fanout(扇出),pubsub,pipeline,request-replyで多対多通信5,非同期IO 6,アクティブコミュニティサポート7,30言語以上の拡張ライブラリ8,window,linux,osxなどのシステム9,LGPLライセンスを実現
インストール手順は次のとおりです.
ソースコードzeromq-3.2.2をダウンロードします.tar.gzコンパイルインストール、php拡張子インストール
phpを編集します.ini extension=zmqを追加する.so
プログラミングリファレンスマニュアルhttp://php.zero.mq
ここでは、https://github.com/imatix/zguideを参照するために多くのプログラム例があります.
A,request/reply
サービス側serverを書きます.php
クライアントクライアントを書くphp
簡単なサービス応答が構築され、同時サポートされています.複数のクライアントを開くことができます.phpはサーバ側テストに接続します.これは簡単なrequest-replyです.pub/sub(パブリッシュ/サブスクリプション)の実装方法を見てみましょう.
B,publish/subscribe
パブリッシャーphp
サブスクリプション・エンドphp
publisherを実行します.php端子は、複数のsubscriberを起動する.php a, php subscriber.php 1($filter=1のすべてのメッセージが受信可能)b,php subscriber.php 1($filter=1のすべてのメッセージが受信可能)c,php subscriber.php 3($filter=3のすべてのメッセージが受信できます)
1,埋め込み可能なネットワークライブラリというよりは同時のsocketフレームワーク2,クラスタ上でTCPよりも高速3,メッセージはinpro,IPC,TCPおよびブロードキャスト方式で4,fanout(扇出),pubsub,pipeline,request-replyで多対多通信5,非同期IO 6,アクティブコミュニティサポート7,30言語以上の拡張ライブラリ8,window,linux,osxなどのシステム9,LGPLライセンスを実現
インストール手順は次のとおりです.
ソースコードzeromq-3.2.2をダウンロードします.tar.gzコンパイルインストール、php拡張子インストール
git clone git://github.com/mkoppanen/php-zmq.git
phpize
./configure --with-php-config=/root/bin/php-config
make && make install
phpを編集します.ini extension=zmqを追加する.so
プログラミングリファレンスマニュアルhttp://php.zero.mq
ここでは、https://github.com/imatix/zguideを参照するために多くのプログラム例があります.
A,request/reply
サービス側serverを書きます.php
<?php
/*
* Hello World server
* Binds REP socket to tcp://*:5555
* Expects "Hello" from client, replies with "World"
* @author Ian Barber <ian(dot)barber(at)gmail(dot)com>
*/
$context = new ZMQContext(1);
$responder = new ZMQSocket($context, ZMQ::SOCKET_REP);
$responder->bind("tcp://*:5555");
while (true) {
// Wait for next request from client
$request = $responder->recv();
printf ("Received request: [%s]
", $request);
// Do some 'work'
sleep (1);
// Send reply back to client
$responder->send("World");
}
クライアントクライアントを書くphp
<?php
//allocate a new context
$context = new ZMQContext();
//create a new socket
$queue = $context->getSocket(ZMQ::SOCKET_REQ,"mysock");
//connect the server
$queue->connect("tcp://127.0.0.1:5555");
//send and receive message
var_dump($queue->send("Hello, using mysock")->recv());
?>
簡単なサービス応答が構築され、同時サポートされています.複数のクライアントを開くことができます.phpはサーバ側テストに接続します.これは簡単なrequest-replyです.pub/sub(パブリッシュ/サブスクリプション)の実装方法を見てみましょう.
B,publish/subscribe
パブリッシャーphp
<?php
// Prepare our context and publisher
$context = new ZMQContext();
$publisher = $context->getSocket(ZMQ::SOCKET_PUB);
$publisher->bind("tcp://127.0.0.1:5556");
while (true) {
$filter = mt_rand(1, 9);
// Send message to all subscribers
$update = sprintf ("%d Hello%d", $filter, $filter);
$publisher->send($update);
usleep(100000);
}
?>
サブスクリプション・エンドphp
<?php
$context = new ZMQContext();
// Socket to talk to server
echo "Subscribe message from server...", PHP_EOL;
$subscriber = new ZMQSocket($context, ZMQ::SOCKET_SUB);
$subscriber->connect("tcp://127.0.0.1:5556");
// Subscribe to 1 or other channel
$filter = $_SERVER['argc'] > 1 ? $_SERVER['argv'][1] : "1";
$subscriber->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, $filter);
// Process 100 updates
$total_temp = 0;
while(true) {
$string = $subscriber->recv();
sscanf ($string, "%d %s", $filter, $msg);
echo "$filter recv $msg
";
}
?>
publisherを実行します.php端子は、複数のsubscriberを起動する.php a, php subscriber.php 1($filter=1のすべてのメッセージが受信可能)b,php subscriber.php 1($filter=1のすべてのメッセージが受信可能)c,php subscriber.php 3($filter=3のすべてのメッセージが受信できます)