0

我有一個套接字,多個線程正在訪問它發送請求和接收響應。在單個套接字上發送和接收多個請求和響應(多線程)

如何實現這一目標? 這可能嗎?

+0

如果線程A發送請求,線程B發送請求,然後響應到達,會發生什麼情況。那個迴應是哪個線程? – f1sh

+0

@ f1sh正確的是這個問題,該如何處理? –

+0

這個問題是重複http://stackoverflow.com/questions/43137948/connection-pooling-and-multithreading-for-tcp-socket 請看上面的答案 –

回答

1

TCP沒有內置的對請求/回覆關聯的支持,因此Spring集成一次只允許在任何套接字上發出一個未完成的請求。您可以使用CachingClientConnectionFactory來使用連接池來啓用一定數量的多線程。

+0

這是正確的,每個套接字只能串行處理。從套接字讀取的線程在再次讀取之前等待併發送響應。 Spring Integration是否解決了這個問題?通過Spring集成,我可以發送多個請求並通過單個套接字異步接收響應? –

+0

NO;閱讀我的答案;它使用信號量來防止多線程同時使用相同的套接字 - 不僅線程可能得到錯誤的響應,每個響應的單個數據包甚至可能會穿插 - 除非您有一個非常受控制的環境,否則很難做到自己想做的事情。該框架無法對此做出任何假設。當在單個套接字上多路複用時,您需要在消息本身中添加一些關聯數據。但是,只要您可以執行關聯,就可以使用協作通道適配器。 –

+0

請參閱[此示例應用程序](https://github.com/spring-projects/spring-integration-samples/tree/master/intermediate/tcp-client-server-multiplex)以獲得該方法。 –

相關問題