2011-10-31 34 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