2013-08-12 6 views
3

all-to-all 통신을하는 가장 좋은 방법은 모든 사람들과 구독하는 모든 사람들과 pub-sub를하는 것이 가장 좋을지, 아니면 이?Zeromq Broadcast All to All

답변

5

XPUB/XSUB 프록시로이를 수행 할 수 있습니다. 많은 고객이 다른 많은 고객과 이야기하고 있습니다. 가이드 here의 개요.

프록시 프록시 대다 클라이언트를 연결하는 중개 역할

; 예 : expresso.c. 프록시는 독립 실행 :

void *subscriber = zsocket_new (ctx, ZMQ_XSUB); 
zsocket_bind (subscriber, "tcp://*:6000"); 
void *publisher = zsocket_new (ctx, ZMQ_XPUB); 
zsocket_bind (publisher, "tcp://*:6001"); 
zmq_proxy (subscriber, publisher, 0); 

클라이언트

클라이언트가 동시에 게시자와 구독자의 역할을한다. 주 스레드에서 pub 소켓을 만들고 프록시의 XSUB쪽에 연결하십시오. 메시지를 보낼 때 사용하십시오.

void *subscriber = zsocket_new (ctx, ZMQ_SUB); 
zsocket_connect (subscriber, "tcp://localhost:6001"); 

클라이언트가 메시지를 게시

는, 모든 클라이언트가 XSUB에서 수신 :

void *publisher = zsocket_new (ctx, ZMQ_PUB); 
zsocket_connect (publisher, "tcp://localhost:6000"); 

지금, 당신은 XPUB에 프록시에서 메시지를 수신하는 클라이언트의 자식 스레드를 생성 할 수 있습니다 그 메시지를 보낸 클라이언트를 포함하여 그것을 얻을 것이므로 그것을 명심하십시오.

양방향 메시징이 필요하지 않은 경우 PubClient 및 SubClient를 구현하십시오. 각 PubClient 및 SubClient는 전송 또는 수신을 위해 의도 된 역할을 수행하지만 두 가지 모두를위한 것은 아닙니다. 위의 클라이언트 코드는 그 접근법에 대해 단순히 두 개의 클래스로 분리됩니다.

또 다른 방법이 있지만 가장 간단합니다. 도움 받기를 바랍니다.