Метод получения сокета ZMQ

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


person Tamil    schedule 31.10.2011    source источник


Ответы (1)


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

person Ian Barber    schedule 05.03.2012
comment
Это было круто :) Я использую двухтактную розетку. Сторона push выполняет привязку и использует постоянный контекст. Я делаю ab -n 10000 -c 300 http://workspace/zmq/zmqPTS.php и обнаруживаю, что мы теряем от 100 до 200 сообщений. Можете ли вы догадаться, почему это произошло? Это из-за медленного симптома столяра?? Как я могу решить эту проблему? - person Tamil; 20.07.2012