ZMQ метод getocket - PullRequest
       5

ZMQ метод getocket

0 голосов
/ 31 октября 2011

Какова цель getSocket (type, persistence_id, callback) в zeromq?

Будет ли он создавать новый сокет, если он не существует с тем же 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-го клиента], выполняется обратный вызов. Это желаемое поведение? Во всех ситуациях, когда структура сокета будет использоваться повторно?

1 Ответ

3 голосов
/ 05 марта 2012

Что делает постоянство, так это сигнализирует распределителю памяти использовать функции постоянного выделения памяти, которые будут распределять контекст (и, если вы спрашиваете, любые сокеты) таким образом, который не исчезнет в конце запроса, но будет длитьсявремя жизни процесса 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 для постоянства сокет воссоздается каждый рази ответный звонок сработал.Во втором случае при включенном постоянстве сокет только что возвращается, и обратный вызов не запускается.

...