1

我们有一个基于 rsocket-rpc 的自定义 spring boot 启动器,我们使用了 FragmentationDuplexConnection。升级到 Rsocket 1.1.0 和 rsocket-rpc 0.3.0 后,代码中似乎不再存在 FragmentationDuplexConnection 了。取而代之的是什么?

我们之所以使用它是因为我们在通过负载均衡器/代理通过 websocket 使用 RSocket 时遇到问题,并且必须将 MTU 设置为 65K。

4

1 回答 1

1

@Mavo 与 RSocket-Java 1.1 我们修改了内部结构并将该逻辑移至专用的反应流运算符。其原因是由于 RSocket-Java 1.0 设计(在双工连接中我们只有一个线程消耗数据,因此碎片在 DuplexConnection 级别上完成),假装用碎片解决的线头阻塞问题实际上并没有解决将阻止其他帧进行分片,直到当前分片的帧无法完全交付)。

为了解决上述设计问题,我们将碎片化和重组移到了更高的层次。现在每个响应端操作符都有一个重组逻辑(例如 -> https://github.com/rsocket/rsocket-java/blob/master/rsocket-core/src/main/java/io/rsocket/core/RequestStreamResponderSubscriber .java#L315)以及每个请求者操作员,在将帧发送到双工连接之前进行分段,并独立于其他请求执行此操作,并且可以在自己的线程上执行此操作(https://github.com/rsocket/rsocket -java/blob/master/rsocket-core/src/main/java/io/rsocket/core/FireAndForgetRequesterMono.java#L150 )

于 2021-02-09T13:48:22.430 回答