2011-10-31 6 views
0

zeromqのgetSocket(type、persistence_id、callback)の目的は何ですか? 1は、コンテキスト内で同じpersistence_idに存在しない場合はZMQ getsocketメソッド

それは新しいソケットを作成するのでしょうか?コールバックが実行取得され、[N-1番目のクライアントが起動した後、n番目のクライアント]

これは私が同時にこのクライアントを実行してどのように多くのこれまでの倍

function newSocket(ZMQSocket $soc, $pid) { 
    echo $pid; 
} 

$context = new ZMQContext(); 

$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket'); 

$socket->setSockOpt(ZMQ::SOCKOPT_HWM,5); 

$socket->connect("tcp://172.16.136.59:5555"); 
for($i=0;$i<10;$i++) 
{ 
    var_dump($socket->send("hai",ZMQ::MODE_NOBLOCK)); 
    sleep(2); 
} 

私のクライアントです。 これは望ましい動作ですか? ソケット構造が再利用される状況は何ですか?

+0

あなたはドキュメントを見ましたか?これがPHPの場合は、http://php.zero.mq/zmqcontext.getsocket.html – ZeissS

+0

をご覧ください。そして、私はこの方法を見つけた場所からその文書を参照しました。しかし、問題は私は新しいソケット構造が作成されたときに実行されるこのコールバック関数を明確にしていないことです。この関数は、基本的な永続接続が再利用された場合には呼び出されません。 「根底にある永続的接続」とはどういう意味ですか? – Tamil

+0

ZMQは、別のサーバに接続するときにソケットを再利用します。そこにある概念を理解するには、ZMQドキュメント自体を見てみてください。私はここであなたを助けるzmqについて十分に知りません。 – ZeissS

答えて

3

永続的なメモリ割り当て関数を使用することは、永続的なメモリ割り当て関数を使用することを意味します。これは、要求の最後にコンテキストがなくなることなくコンテキストを割り当てます最後にPHPプロセスの寿命。これは、接続プールlibsのいくつかと同じように動作します。コールバックは、ソケットが初めて作成されたときに使用されます。持続性は、たとえば、コンテキストに設定する必要があります。

<?php 

function newSocket(ZMQSocket $soc, $pid) { 
    echo "Creating New Socket \n", $pid, "\n"; 
} 

echo "=========Creating without persistence ==========\n"; 

$context = new ZMQContext(1, false); 

$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket'); 

$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket'); 

echo "========Creating with persistence ==========\n"; 

$context = new ZMQContext(1, true); 

$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket'); 

$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket'); 

はあなたの最初のインスタンスで

# php -dextension=zmq.so test.php 
=========Creating without persistence ========== 
Creating New Socket 
mysocket 
Creating New Socket 
mysocket 
========Creating with persistence ========== 
Creating New Socket 
mysocket 

を与えるだろう、永続性する場合はfalseで、ソケットが毎回再作成し、コールバックが発射されます。 2番目には、persistance onを指定すると、ソケットが返され、コールバックはトリガされません。

+0

それは素晴らしいです:)私はプッシュプルソケットを使用しています。プッシュサイドはバインドを行い、永続コンテキストを使用します。私は 'ab -n 10000 -c 300 http:// workspace/zmq/zmqPTS.php'を実行します。私は100から200までのmsgsを緩和しています。なぜそれが起こるのだろうか?それはゆっくりとした結合者の症状のためですか?どうすればこの問題を克服できますか? – Tamil

関連する問題