我想在一個線程上發送請求並在另一個線程上收集響應。這將如何工作,我無法匹配請求與響應權限?假設我無法自定義請求/響應。 如果我在一個線程上發送請求,那麼甚至可以與接收線程/結束一起工作?所收到的東西是不是混淆了,因爲我仍然在收到第一個請求的同時繼續向同一個套接字發送東西?發送和接收通過相同的套接字,但在不同的線程?
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