Zeromq全部播出

时间:2013-08-12 01:56:42

标签: c++ zeromq

进行全面沟通的最佳方式是什么,最好是在每个人都订阅其他人的情况下做一个pub-sub,还是有更适合这种情况的套接字类型?

1 个答案:

答案 0 :(得分:6)

您可以使用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 *publisher = zsocket_new (ctx, ZMQ_PUB);
 zsocket_connect (publisher, "tcp://localhost:6000");

现在,您需要在客户端中创建一个子线程,以侦听来自XPUB上代理的消息:

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

当客户端发布消息时,所有侦听XSUB的客户端都会收到消息,包括发送消息的客户端,所以请记住这一点。

如果您不需要双向消息传递,请实施PubClient和SubClient,每个人都可以发送或接收发送或接收的角色,但不能同时发挥作用;上述客户端代码将简单地分为两种类,用于该方法。

同样,还有其他方法可以做到这一点,但这是最直接的。 希望它有所帮助