0

단일 소켓을 가지고 있고 요청을 보내고 응답을 수신하는 다중 스레드가 액세스하고 있습니다.단일 소켓에서 다중 요청 및 응답 (다중 스레드)을 보내고받습니다.

어떻게해야합니까? 가능합니까?

+0

스레드 A가 요청을 보내고 스레드 B가 요청을 보내면 응답이 도착합니다. 어떤 스레드가 그 응답입니까? – f1sh

+0

@ f1sh 올바른지 질문입니다. 어떻게 처리할까요? –

+0

이 질문은 http://stackoverflow.com/questions/43137948/connection-pooling-and-multithreading-for-tcp- 소켓의 중복입니다 위의 대답을 –

답변

1

TCP에는 요청/응답 상관에 대한 지원 기능이 내장되어 있지 않으므로 Spring 통합은 한 번에 모든 소켓에서 하나의 미해결 요청 만 허용합니다. CachingClientConnectionFactory을 사용하여 연결 풀을 사용하여 일정량의 멀티 스레딩을 활성화 할 수 있습니다.

+0

에서 확인하십시오. 각 소켓은 프로세스 연속. 소켓에서 읽는 스레드는 다시 읽기 전에 응답을 기다리며 보냅니다. 스프링 통합이이 문제를 해결합니까? Spring Integration을 사용하면 여러 요청을 보내고 단일 소켓으로 비동기 적으로 응답을받을 수 있습니까? –

+0

NO; 내 대답 읽기; 세마포어를 사용하여 여러 스레드가 동시에 같은 소켓을 사용하는 것을 방지합니다. 스레드가 잘못된 응답을 얻을 수있을뿐만 아니라 각 응답의 개별 패킷도 산재되어있을 수 있습니다. 매우 제어 된 환경이 아니라면 원하는 것을 수행하기가 매우 어렵습니다. . 프레임 워크는 그것에 대해 어떠한 가정도 할 수 없습니다. 단일 소켓에서 멀티플렉싱 할 때 메시지 자체에 상관 관계 데이터가 필요합니다. 그러나 상관 관계를 수행 할 수있는 한 공동 작업 채널 어댑터를 사용할 수 있습니다. –

+0

이를 수행하는 한 가지 방법은 [이 샘플 앱] (https://github.com/spring-projects/spring-integration-samples/tree/master/intermediate/tcp-client-server-multiplex)을 참조하십시오. –