我想在一个线程上发送请求并在另一个线程上收集响应。这将如何工作,我无法匹配请求与响应权限?假设我无法自定义请求/响应。 如果我在一个线程上发送请求,那么甚至可以与接收线程/结束一起工作?所收到的东西是不是混淆了,因为我仍然在收到第一个请求的同时继续向同一个套接字发送东西?发送和接收通过相同的套接字,但在不同的线程?
0
A
回答
1
这听起来像你正在写一个多路复用器。如果我们假设每个请求在某个时刻都会得到恰好一个响应(假设没有严重错误),那么您需要保留一个队列,用于发送请求的人,这样当您收到响应时,您可以匹配响应正确的顺序。确保个人请求以原子方式写入且不中断是至关重要的;这可以通过锁定(围绕写入)或通过创建一个单独的等待出站消息队列来完成。
我这样做的方式是使用Task
API;每个挂起的响应基本上映射到TaskCompletionSource<T>
(对于某些T
);当您收到回复时,您可以使用TrySetResult
(或错误),表示主叫方已完成 - 我们可以使用Wait
,ContinueWith
或await
。
0
主要的问题是请求/响应是否由对方异步处理。
如果服务器以相同的顺序响应,那么我会将BlockingCollection作为Fifo队列添加为数据存储。 (BlockingCollection的默认集合类型是ConcurrentQueue)。
发件人添加到BlockingCollection并且收件人从集合中获取。
相关问题
- 1. 发送和接收通过相同的套接字
- 2. 通过网络套接字发送和接收相同的数据通过网络套接字
- 3. 重复使用相同的套接字发送和接收(Python)
- 4. 发送和接收来自不同线程的相同套接字不起作用
- 5. 是否可以通过不同的套接字发送和接收数据包?
- 6. Select()使用相同套接字描述符发送和接收
- 7. 套接字同时发送/接收
- 8. 通过同一活动的套接字发送和接收数据
- 9. 通过TCP套接字的Android发送/接收字节[]通过TCP套接字
- 10. 在一个线程中通过tcp套接字发送和接收数据
- 11. 发送从多个线程相同的UDP套接字
- 12. 发送相同的信息到多个线程/套接字?
- 13. 如何通过相同的套接字连接发送图像和文本
- 14. 通过套接字接口接收不同的数据类型
- 15. 在同一个套接字上发送和接收
- 16. 通过TCP套接字发送和接收数据的问题
- 17. 通过Java中的套接字发送和接收数据
- 18. 在Python中通过套接字发送和接收输出
- 19. 分别通过TCP套接字发送和接收字符串
- 20. 通过套接字和端口发送和接收数据
- 21. 计算不同套发送/接收对
- 22. 如何发送和接收来自Python中的相同套接字?
- 23. 记录通过套接字连接发送/接收的内容
- 24. Netty 4 - 使用不同的线程发送和接收
- 25. 如何接收和发送不同的线程与C插座
- 26. QTcpServer接收和发送不同的线程
- 27. RabbitMQ不能发送和接收来自相同的进程
- 28. Java:通过套接字发送后的公钥不同
- 29. 如何通过套接字发送和接收图像
- 30. 通过套接字发送和接收数据python3
不是基于套接字通信事件吗?你为什么需要线程? – 2013-03-12 12:27:12