2011-10-31 2 views
0

zeromq에서 getSocket (type, persistence_id, 콜백)의 목적은 무엇입니까?ZMQ getsockets 메소드

컨텍스트에 동일한 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-1 번째 클라이언트가 시작된 후 n 번째 클라이언트, 콜백이 실행지고 있습니다. 원하는 동작입니까? 소켓 구조가 재사용되는 모든 상황은 무엇입니까?

+0

설명서를 보셨습니까? 이것이 PHP 인 경우 http://php.zero.mq/zmqcontext.getsocket.html – ZeissS

+0

ur 응답 ZeissS에 감사드립니다. 그리고 나는이 방법을 발견 한 곳에서 그 문서를 참조했습니다. 그러나 문제는 "새로운 소켓 구조가 생성 될 때 실행되는이 콜백 함수입니다.이 함수는 기본 영구 연결을 다시 사용하면 호출되지 않습니다." "기본 영구 연결"은 무엇을 의미합니까? – 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 

를 제공합니다 소켓이 때마다 다시하고, 콜백 해고 . 두 번째로 persistance on을 사용하면 소켓이 방금 반환되고 콜백이 트리거되지 않습니다.

+0

그것은 굉장했습니다 :) 나는 풀 소켓을 사용합니다. 밀어 넣기 쪽은 바인드를 수행하고 지속적인 컨텍스트를 사용합니다. 나는'ab -n 10000 -c 300 http : // workspace/zmq/zmqPTS.php'를하고 100에서 200 개의 메시지를 찾는다. 왜 그렇게 될지 짐작할 수 있습니까? 그것은 "느린 결합 자"증상 때문입니까 ?? 이 문제를 어떻게 극복 할 수 있습니까? – Tamil

관련 문제