ZMQ的获取方法

时间:2011-10-31 10:05:35

标签: php zeromq

zeromq中getSocket(type,persistence_id,callback)的目的是什么?

如果在上下文中不存在相同的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 :(得分: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

在第一个实例中,如果持久化为false,则每次都会重新创建套接字,并且会触发回调。在第二种情况下,如果持久,则仅返回套接字,并且不会触发回调。