我在我的应用中使用了zmq
ROUTER
和 DEALER
套接字(C++
)。
一个进程正在侦听zmq ROUTER
套接字以供客户端连接(服务)。
客户端使用zmq DEALER
套接字连接到此服务。从客户端我正在对服务进行同步(阻塞)请求。避免
响应的无限等待时间,我在RCVTIMEO
套接字上设置 DEALER
,比如5 ms。设置此超时后,我发现没有预料到
在客户端上的行为。
以下是详细信息:
案例1:RCVTIMEO
(客户端)套接字上未设置DEALER
在这种情况下,假设客户端向服务发送1000请求。在这些约850个请求的请求中,客户端在5毫秒内收到响应。
对于剩余的150个请求,响应的时间超过5毫秒。
案例2:在RCVTIMEO
(客户端)套接字上将DEALER
设置为5毫秒
在这种情况下,对于前150-200请求,我看到RCVTIMEO
期内收到的有效回复。对于所有剩余的请求,我看到RCVTIMEO
超时发生,这是不期望的。两种情况下的请求都是一样的。
预期的行为应该是:对于850个请求,我们应该收到有效的回复(因为它们会在RCVTIMEO
内)。而剩下150
请求我们应该看到超时发生。
为了获得超时功能,我尝试了 zmq_poll()
,而不是设置RCVTIMEO
,但结果相同。大多数请求都是TIMEDOUT。
我查看了zmq文档以获取详细信息,但没有找到任何内容。
有人可以解释一下这种行为的原因吗?