如何在客户端同步发送和接收帧
本文关键字:客户端 同步 | 更新日期: 2023-09-27 18:08:46
如果我发送请求(帧)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中实现了?
在我的博客中阅读AsyncSocket模式:
http://somdoron.com/2014/08/netmq-asp-net/它有一个例子TaskCompletionSource,序列为每个请求和字典。
如果你想要同步的请求/响应通信,你可以使用REQ/REP套接字来代替DEALER/ROUTER。
如果你想要异步通信,你需要匹配请求的响应,你可以在请求中发送一个唯一的请求ID,并在响应中返回这个请求ID。