0

私は単一のソケットを持っており、複数のスレッドが要求に応答して応答を受け取っています。シングルソケットで複数の要求と応答(マルチスレッド)を送受信する

これを行うには? 可能ですか?

+0

スレッドAが要求を送信し、スレッドBが要求を送信し、応答が到着した場合はどうなりますか。そのスレッドはどのスレッドに対応していますか? – f1sh

+0

@ f1sh正しいそれは問題です、これをどう対処するのですか? –

+0

この質問は、http://stackoverflow.com/questions/43137948/connection-pooling-and-multithreading-for-tcp-socketの複製です 答えは上記をご覧ください –

答えて

1

TCPには要求/応答の相関がサポートされていないため、Spring統合では一度に1つのソケットで未処理の要求が1つしか許可されません。 CachingClientConnectionFactoryを使用すると、接続のプールを使用して一定量のマルチスレッドを有効にすることができます。

+0

これは、シリアルに処理します。ソケットから読み込んだスレッドは、応答を待ってから、再度読み込みます。 Spring Integrationはこれを解決しますか? Spring Integrationを使用すると、複数のリクエストを送信し、単一ソケットで非同期で応答を受け取ることはできますか? –

+0

NO;私の答えを読んでください。セマフォを使用して複数のスレッドが同じソケットを同時に使用するのを防ぐ - スレッドが間違った応答を受け取るだけでなく、各応答の個々のパケットが散在することさえあります。非常に制御された環境を持たない限り、 。フレームワークはそれについて何ら仮定することはできません。単一のソケット上で多重化する場合は、メッセージ自体に相関データが必要です。ただし、相関を行うことができる限り、共同チャネルアダプタを使用できます。 –

+0

これを行うには、[このサンプルアプリケーション](https://github.com/spring-projects/spring-integration-samples/tree/master/intermediate/tcp-client-server-multiplex)を参照してください。 –

関連する問題