如何在ZeroMQ中启动并忘记客户端服务器调用?

如何在ZeroMQ中启动并忘记客户端服务器调用?,zeromq,Zeromq,我想在不等待回复的情况下呼叫服务器。对我来说,答案根本不重要。所以这是一种“失火后忘记”的电话。这些文件似乎没有一个简单、直接的答案。一个地方它有复杂的全异步REQ-REP拓扑,另一个地方它暗示经销商-路由器模式可能会有一些用处。我认为这是一件非常简单的事情,ZeroMQ应该能够立即完成,而不必打开太多端口,在拓扑中创建两个以上的层并引入任何额外的延迟。还有一个地方,我读到关于超时的消息,并考虑将其设置为0,但我不知道超时后到达的消息会发生什么情况。另一个示例代码 很接近,但看起来客户端仍必须继

我想在不等待回复的情况下呼叫服务器。对我来说,答案根本不重要。所以这是一种“失火后忘记”的电话。这些文件似乎没有一个简单、直接的答案。一个地方它有复杂的全异步REQ-REP拓扑,另一个地方它暗示经销商-路由器模式可能会有一些用处。我认为这是一件非常简单的事情,ZeroMQ应该能够立即完成,而不必打开太多端口,在拓扑中创建两个以上的层并引入任何额外的延迟。还有一个地方,我读到关于超时的消息,并考虑将其设置为0,但我不知道超时后到达的消息会发生什么情况。另一个示例代码

很接近,但看起来客户端仍必须继续轮询响应,否则队列将超出限制。我只想做简单的,纯粹的,快速的射击和忘记呼叫

最简单的方法是什么

最简单的方法是什么

缩放?缩放规则! 对于低数量的客户端和低密度的TPS:-可以使用客户端推送原型+服务器端拉送原型+检查循环服务逻辑+RX缓冲区的正确HWM设置

或 -可以使用独占的成对正式通信模式,其中每个客户机可以使用其独奏者连接,在服务器端以非阻塞模式集中轮询以进行快速recv检测

对于更高计数或非托管客户端填充: -可以享受单向正式沟通模式,客户端为PUB原型+服务器端为子原型,无限制地订阅此类中心主题过滤器中的所有主题

最简单的方法是什么

缩放?缩放规则! 对于低数量的客户端和低密度的TPS:-可以使用客户端推送原型+服务器端拉送原型+检查循环服务逻辑+RX缓冲区的正确HWM设置

或 -可以使用独占的成对正式通信模式,其中每个客户机可以使用其独奏者连接,在服务器端以非阻塞模式集中轮询以进行快速recv检测

对于更高计数或非托管客户端填充: -可以享受单向正式沟通模式,客户端为发布原型+服务器端为次原型,无限制地订阅此类中心主题过滤器中的所有主题。

您可以尝试此模式。 一侧使用绑定操作创建消息通道。是我的听筒

另一方向通道发送消息。是发送者

我们有两种选择:

接收者在里面积累新的信息并处理这些信息; 发件人可用。接收者不是。发送者正在内部累积消息。当接收器启动时,ZeroMq将在接收器端发送所有消息。现在,接收者正在积累内部的新旧消息,并对其进行处理。 发件人:

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);
你可以试试这个。 一侧使用绑定操作创建消息通道。是我的听筒

另一方向通道发送消息。是发送者

我们有两种选择:

接收者在里面积累新的信息并处理这些信息; 发件人可用。接收者不是。发送者正在内部累积消息。当接收器启动时,ZeroMq将在接收器端发送所有消息。现在,接收者正在积累内部的新旧消息,并对其进行处理。 发件人:

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);

如果您不关心响应,为什么不使用传统的pub-sub?zmq.socket'pub'/zmq.socket'sub';然后您将消息发送到特定的topicpub sub,这对于模拟fire and forget RPC调用更为复杂,并且会有更多的延迟。到目前为止,有两个答案涵盖了这一点,文档提到了这一点,这是推拉组合。这正是你想要的,开火然后忘记。你想打电话-你推到服务器,服务器拉。不需要服务器回复。如果您最终确实需要回复,那么您将为客户端实现相同的逻辑,只不过这次是客户端拉入和服务器推入,并且您实现了文档对此模式的描述—一个管道。如果您不关心响应,为什么不使用传统的发布订阅?zmq.socket'pub'/zmq.socket'sub';然后您将消息发送到特定的topicpub sub,这对于模拟fire and forget RPC调用更为复杂,并且会有更多的延迟。到目前为止,有两个答案涵盖了这一点,文档提到了这一点,这是推拉组合。这正是你想要的,开火然后忘记。你想打电话-你推到服务器,服务器拉。不需要服务器回复。如果您最终确实需要回复,那么您将为客户端实现相同的逻辑,只是这次客户端拉入和服务器推入,并且您实现了文档中关于此模式的说明—管道
n为什么和如何工作。如果你能加上一个关于为什么和如何工作的简短说明,那就太好了。