如果我发送请求(帧)B并接收响应,同时我已经在等待前一个请求(A)的响应,则B任务中收到的响应实际上是对A请求的响应:
request A sent
request B sent
request B processed (quick)
response B sent
response B received (*)
...
request A processed (slow)
response A sent
response A received
通过天真匹配,我会得到点(*)匹配请求A - 响应B。
那么如何同步呢?即我想结束请求A和响应A,并请求B响应B,无论处理每个请求需要多长时间。为了记录,我使用的是经销商路由器套接字。
我正在考虑创建池请求(Dictionary
),其中任务完成标记绑定到发送的每个请求。任务在池中创建新槽,发送请求并等待完成。在后台有任务一直在运行 - 接收器 - 它只是接收响应,将每个响应放在适当的槽中并将给定的任务令牌设置为已完成。我是在正确的轨道上,我错了,还是已经在NetMQ中实现了?。
答案 0 :(得分:1)
在我的博客中了解AsyncSocket模式:
http://somdoron.com/2014/08/netmq-asp-net/
它有一个TaskCompletionSource示例,每个请求和字典的序列。
答案 1 :(得分:0)
如果您想要同步请求/响应通信,您可以使用REQ / REP套接字而不是DEALER / ROUTER。
如果您需要异步通信并且需要将响应与请求匹配,则可以在请求中发送唯一的请求ID,并在响应中返回此请求ID。