私は、バネ統合TCPを使用して構築されたTCPクライアントを持っており、サーバはキープアライブメッセージ(ping/pongスタイル)をサポートしています。接続はCachingClientConnectionFactory
を使用して設定されています。このサーバー機能を利用したいと思います。バネ統合を使用してTCP接続でキープアライブ接続を実装する方法は?
private static final int SERIALIZER_HEADER_SIZE = 2;
/**
* Serializer used by connection factory to send and receive messages
*/
@Bean
public ByteArrayLengthHeaderSerializer byteArrayLengthHeaderSerializer() {
return new ByteArrayLengthHeaderSerializer(SERIALIZER_HEADER_SIZE);
}
@Bean
public AbstractClientConnectionFactory tcpClientConnectionFactory() {
TcpNetClientConnectionFactory connFactory =
new TcpNetClientConnectionFactory(props.getUrl(), props.getPort());
connFactory.setSerializer(byteArrayLengthHeaderSerializer());
connFactory.setDeserializer(byteArrayLengthHeaderSerializer());
connFactory.setSoTimeout(props.getSoTimeout());
if (props.isUseSSL()) {
connFactory.setTcpSocketFactorySupport(new DefaultTcpNetSSLSocketFactorySupport(() -> {
return SSLContext.getDefault();
}));
}
return connFactory;
}
/**
* Connection factory used to create TCP client socket connections
*/
@Bean
public AbstractClientConnectionFactory tcpCachedClientConnectionFactory() {
CachingClientConnectionFactory cachingConnFactory =
new CachingClientConnectionFactory(tcpClientConnectionFactory(), props.getMaxPoolSize());
cachingConnFactory.setConnectionWaitTimeout(props.getMaxPoolWait());
return cachingConnFactory;
}
接続がかどうかを確認するために、私は、接続が開か保つことができますが、私はまた、これらのサーバー上のレバレッジを取るアライブメッセージを維持し、随時、それらのメッセージを送りたいと思ったここConfigure keep alive to keep connection alive all the timeを掲載ソリューションを使用する:ここに私のBean構成ですまだ生きています。これにより、ソケットが閉じられた場合に新しい接続を再接続/作成する必要がないため、クライアント側のパフォーマンスが向上します。
これに基づいて、誰かがスプリング統合を使用してこれを実装する方法について提案していますか?
あなたの意図が正確には分かりません。 'soKeepAlive'をtrueに設定すると、オペレーティングシステムはpingを送信してソケットを開いたままにします。 'soTimeout'を設定しないと、ソケットは無期限に開いたままになります。 –
サーバは 'KEEP_ALIVE_REQUEST'のようなものを期待し、' KEEP_ALIVE_RESPONSE'を返します。私の質問は、接続を開いたままにするためにそれを使用することでしたが、あなたの応答 'soKeepAlive'と' soTimeout'に基づいて、そのトリックを行うことができます。 –
アップデート:@GaryRussellサーバーは30秒間使用しないとソケットを閉じます。それに基づいて、春の統合には、クライアントソケットを再利用できるように、特定のキープアライブメッセージをバックグラウンドで送信するために使用できる機能がありますか? –