doc: 阅读Sinks.many().multicast()文档

This commit is contained in:
asahi
2025-04-18 00:46:38 +08:00
parent c6be75ec7a
commit f57adf0481

View File

@@ -74,6 +74,8 @@
- [`Sinks.many().unicast().onBackpressureBuffer(args?)`](#sinksmanyunicastonbackpressurebufferargs)
- [onBackpressureBuffer](#onbackpressurebuffer)
- [Sinks.many().multicast().onBackpressureBuffer(args?)](#sinksmanymulticastonbackpressurebufferargs)
- [autoCancel](#autocancel)
- [Sinks.many().multicast().directAllOrNothing()](#sinksmanymulticastdirectallornothing)
>>>>>>> 8d41980 (doc: 阅读transient errors文档)
# Reactor
@@ -1139,6 +1141,25 @@ Sinks的类别包括
> 在为`onBackpressureBuffer`指定了`Queue`的情况下,如果`queue已满并且下游并没有向上游发送足够的reqeust`时,`sink将会拒绝该value的推送`。
#### Sinks.many().multicast().onBackpressureBuffer(args?)
对于该方法创建的`multicast Sinks.Many`可以向多个subscribers发送数据并且对每个subscriber都能独立地接收backpressure。
> 对于每个subscriber只会接收在其subscribe之后推送到sink的signal
基础的multicast sink可以通过`Sinks.many().multicast().onBackpresuureBuffer()`来进行创建。
##### autoCancel
在默认情况下如果所有subscribers都被取消`cancelled`即取消订阅其会对internal buffer进行清空并且停止接收新的subscriber。
如果想要修改`autoCancel`的行为,可以调用`Sinks.many().multicast()`中的静态工厂方法通过autoCancel参数来调整`autoCancel`的行为。
#### Sinks.many().multicast().directAllOrNothing()
该方法创建的拥有最简单的backpressure处理策略
- 如果任何subscriber处于`too slow`状态demand为0那么对于所有的subscriber该onNext都会被丢弃。
但是slow subscribers并不会被终止`一旦slow subscribers又发送了request`所有subscribers都会重新从sinks.many接收数据。
在`Sinks.many()`终止后(通常是通过调用`emitError, emitComplete`方法其仍然允许新的subscriber对其进行订阅但是只会对新订阅者replay termination signal。