进行全对全通信的最佳方式是什么,最好是在每个人都订阅其他人的情况下进行发布-订阅,还是有更适合此的套接字类型?
问问题
4371 次
1 回答
8
您可以使用 XPUB/XSUB 代理来实现这一点;许多客户与许多其他客户交谈;此处指南中的概述。
代理人
代理充当连接多对多客户端的中介;来自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,每个都扮演发送或接收的预期角色,但不能同时扮演两者;对于该方法,上述客户端代码将简单地分为两个类。
同样,还有其他方法可以做到这一点,但这是最直接的。希望能帮助到你
于 2013-08-12T02:59:15.677 回答