メッセージキュー-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拡張子インストール
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のすべてのメッセージが受信できます)