2011-10-31 71 views
0

zeromq中getSocket(type,persistence_id,callback)的用途是什麼?ZMQ getsocket方法

如果在上下文中不存在相同的persistence_id,它是否會創建一個新的套接字?

這是我的客戶

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); 
} 

多少次過我同時運行該客戶端[第n個客戶端後,第n-1客戶端啓動],結果收到了執行回調。 這是所需的行爲? 套接字結構將被重用的所有情況是什麼?

+0

你看過文檔嗎?如果這是PHP,看看http://php.zero.mq/zmqcontext.getsocket.html – ZeissS

+0

感謝您的反應蔡司。順便說一句,我確實從那裏找到了這個方法的文檔。但問題是我不清楚abt「這個回調函數,當一個新的套接字結構被創建時執行該函數。如果基礎持久連接被重用,這個函數不會被調用」。 「底層持續連接」是什麼意思? – Tamil

+0

當連接到另一臺服務器時,ZMQ重新使用套接字。您可能需要查看ZMQ文檔本身以瞭解其中的一些概念。我對zmq沒有足夠的瞭解來幫助你。 – ZeissS

回答

3

持久性的作用是指示內存分配器使用持久內存分配函數,它將以不會在請求結束時消失的方式分配上下文(以及如果你問,任何套接字),但會最後一個PHP進程的生命週期。它的工作原理與連接池庫相同,如果這樣做合理的話。該回調將在第一次創建套接字時使用。持久性需要在上下文中進行設置,例如:

<?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 

在第一種情況下,假以持久性,插座每次重新創建,並且回調解僱。在第二種情況下,只要返回持久性,套接字就不會被觸發。

+0

這真棒:)我使用推拉插座。 Push端執行綁定並使用持久性上下文。我做'ab -n 10000 -c 300 http:// workspace/zmq/zmqPTS.php',我發現我們鬆了大約100到200個信息。你能猜到爲什麼會發生?那是因爲「緩慢的木匠」症狀?我怎樣才能克服這個問題? – Tamil