ZMQ getsocket метод

Каква е целта на 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 източник
comment
Разгледахте ли документацията? Ако това е php, погледнете php.zero.mq/zmqcontext.getsocket.html   -  person ZeissS    schedule 31.10.2011
comment
Благодаря за отговора ZeissS. И между другото препратих тази документация, откъдето намерих този метод. Но проблемът е, че не съм наясно с тази функция за обратно извикване, която се изпълнява, когато се създаде нова структура на сокет. Тази функция не се извиква, ако основната постоянна връзка се използва повторно. Какво имат предвид те под основна постоянна връзка?   -  person Tamil    schedule 31.10.2011
comment
ZMQ използва повторно сокети, когато се свързва с друг сървър. Може да искате да погледнете самата ZMQ документация, за да разберете някои концепции там. Не знам достатъчно за zmq, за да ви помогна тук.   -  person ZeissS    schedule 31.10.2011


Отговори (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

В първия случай, с невярно за постоянство, сокетът се създава отново всеки път и обратното извикване се задейства. Във втория, с включено постоянство, сокетът просто се връща и обратното извикване не се задейства.

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