0

Reactor バージョンと1.2.8.RELEASEの管理された依存関係を持つSpring Boot バージョンを使用しています。org.projectoreactor.*1.1.6.RELEASE

私が直面している問題は、カスタム Codec ( reactor.io.encoding.Codec) 内にあり、指定された Buffer ( reactor.io.Buffer) は 1024 バイトに制限されていますが、メッセージはその制限を超えています。メッセージをデコードしようとすると、完全なメッセージではなく (部分的なもののみ)、メッセージ全体が予期されるため、デコードに失敗します。

質問 1:適用関数が正しく機能するようにBuffer bytes( )を増やすにはどうすればよいですか? reactor.io.Buffer以下の簡単な例:

public class StringDecoder implements Function<Buffer, String> {

    // Buffer is limited to 1024 but the message the client sent
    // was 2k
    @Override
    public String apply(Buffer bytes) {
        return bytes.toString();
    }
}

質問 2: 適用関数 (上記) をチャンク化するにはどうすればよいですか? これは、Netty のバッファーが限界に達すると、適用関数が独自のバッファーを作成 (およびバッファーを管理) し、最終的にメッセージをデコードして、Reactory/Netty がそれを Consumer に渡すことができることを意味します。

注:私の「メイン」メソッドでは、環境をセットアップするために以下が使用されます。Netty サーバーは Windows で実行され、クライアントは Linux で実行されます。これは TCP の Windows 実装に関連していますか?

// NOTES: ServerSocketOptions sets the max buffer for send and receive to 
// something much larger than 1024. Verified with debugger
TcpServerSpec<String, String> spec = new TcpServerSpec<String, String>(NettyTcpServer.class);
spec.env(env);
spec.listen(port);
spec.dispatcher("sync");
spec.codec(new AgentCodec());
spec.consume(connectionHandler(handler));

TcpServer<String, String> tcp = spec.get();
tcp.start().await();
4

1 に答える 1

0

さて、コードをデバッグした後、問題が何であるかを理解しました-ところで、これはReactorプロジェクト(tisk tisk)で見つけたどのドキュメントにもありません。

適用関数は、より多くのメッセージで呼び出され続けます。したがって、メッセージが 2K の場合、apply は 2 回呼び出されます。1回目は1K、2回目は2K。

注: バッファ位置を進めないと、バッファに追加されます。バッファ位置を進めた場合、apply が再度呼び出されたときに削除されます。

于 2016-01-07T17:58:10.597 に答える