如果我发送请求(帧)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 中实现了?