2015-02-02 9 views
0

:ZeroMQ의 REQ-REP에 파이프 라인을 어떻게 추가합니까? 내가 수행하는 서버를 만들려면 내가 ZeroMQ 실험하고

REQ-파이프 라인 REPLY 내가 순차적으로 원하는

데이터 쿼리를 parallelise하는 INPROC 파이프 라인을 통해 밀어, 데이터 쿼리 요청을 받고 싱크는 데이터를 다시 병합합니다. 싱크가 데이터를 병합 한 후 싱크는 병합 된 데이터를 요청에 대한 응답으로 보냅니다.

이것이 가능합니까? 어떻게 보일까요? 밀어 넣기/끌기가 REP 소켓에 대한 클라이언트의 주소를 다시 보존 할 것인지 확실하지 않습니다.

답변

1

각 클라이언트는 한 번에 하나의 요청 만 처리한다고 가정합니다.

이것이 가능합니까?

예 (소켓 유형이 다르지만).

어떻게 보입니까?

(C에서)

은 무엇 당신이하실 수 있습니다 것은 ZMQ_ROUTER 소켓에 외부 서버 소켓에 ZMQ_REP 소켓에서 변화이다. 라우터/딜러 소켓에는 ID가있어 파이프 라인에서 여러 요청을 처리하고 각 요청에 대해 올바르게 응답 할 수 있습니다.

비동기 클라이언트/서버 패턴 : http://zguide.zeromq.org/php:chapter3#The-Asynchronous-Client-Server-Pattern

이의 유일한 장애는 당신이 ZMQ 메시지의 여러 부분을 관리하는 데 필요한 것입니다. 첫 번째 부분은 ID입니다. 둘째는 null입니다. 셋째는 데이터입니다. REQUEST와 동일한 순서로 응답하는 동안 신원은 응답 데이터를 올바른 클라이언트로 안내합니다.

struct msg { 
    zmq_msg * identity; 
    zmq_msg * nullMsg; 
    zmq_msg * data; 
}; 

메시지를 수신 할 때 zmq_msg_more 사용하고 정확하게 보낼 때 더 플래그를 설정해야합니다 : 나는 구조체 내 요청을 감쌌다.

밀어 넣기/끌기가 REP 소켓을 다시 보낼 클라이언트 주소를 보존할지 확신 할 수 없습니다.

정확합니다. 푸시 풀 패턴은 여러 클라이언트간에 리턴 주소를 지정할 수 없습니다.