我想调用服务器而无需等待回复。在我的案例中,回复根本不重要。所以这是一种即发即弃的电话。文档似乎没有一个简单,直接的答案。它有一个复杂的拓扑结构,用于"完全异步" REQ-REP
以及其他地方暗示 DEALER-ROUTER
模式可能会有所帮助。我认为这很简单,ZeroMQ应该能够开箱即用而无需打开太多端口,在拓扑中创建超过2层并引入任何额外的延迟。我读到另一个关于超时的地方,并考虑设置为0,但我不知道在超时后到达的消息会发生什么。另一个示例代码here
// Asynchronous client-to-server (DEALER to ROUTER)
...
// This is our client task
// It connects to the server, and then sends a request once per second
// It collects responses as they arrive, and it prints them out. We will
// run several client tasks in parallel, each with a different random ID.
...
接近,但仍然看起来客户端必须保持轮询响应或队列将超出绑定。我只是想做简单的纯粹和快速的火灾而忘记打电话。
实现这一目标的最简单方法是什么?
答案 0 :(得分:3)
你可以试试这个。 一方创建消息通道(使用绑定操作)。它是接收器。
另一方将消息发送到频道。这是发件人。
我们有两个选择:
发信人:
void* senderSocket = zmq_socket(context, ZMQ_PUSH);
zmq_connect(senderSocket, "...");
...
zmq_msg_send(&zmqMessage, senderSocket, 0);
接收器:
void* pullSocket = zmq_socket(context, ZMQ_PULL);
zmq_bind(pullSocket, "...");
...
zmq_msg_recv(&message, pullSocket, 0);
答案 1 :(得分:1)
实现 此 的最简单方式是什么?
对于低数量的客户和低密度的TPS:
- 可以使用(客户端) PUSH
- archetype + PULL
-archetype(服务器端)+检查循环服务逻辑+ RX缓冲区的正确HWM设置
或
- 可以使用(独家) PAIR-PAIR
正式通信模式,其中每个客户端可以使用它的独奏连接,在服务器端以非阻塞模式进行集中轮询,以实现快速recv()检测
对于更高的计数或未管理的客户群:
- 可以在服务器端享受客户端+ PUB
-archetype SUB
-archetype的单向形式通信模式,非限制性地订阅了这样的中心topic
- 过滤器中的所有主题。