diff --git a/spring/webflux/Reactor.md b/spring/webflux/Reactor.md index fdc6c00..1782e4c 100644 --- a/spring/webflux/Reactor.md +++ b/spring/webflux/Reactor.md @@ -56,4 +56,20 @@ reactor引入了两个实现`Publisher`的类:`Mono`和`Flux`。 上述两个类代表了在异步处理场景中的大致基数。 - Mono:例如,对于http请求的场景,一个请求只会产生一个响应,故而对响应执行`count`操作并没有任何意义。此时,可以通过`Mono`来代表http调用的结果,`Mono`中只提供了上下文中包含`0...1`个元素的对应操作 -- 当执行某些`可能会改变异步处理中最大基数的操作`时,可能会导致类型的改变,例如执行`Flux`中的`count`操作将会返回`Mono`的类型 \ No newline at end of file +- 当执行某些`可能会改变异步处理中最大基数的操作`时,可能会导致类型的改变,例如执行`Flux`中的`count`操作将会返回`Mono`的类型 + +### Flux `0...n` +![alt text](image.png) + +`Flux`是一个标准的`Publisher`,代表基数为`0...n`的异步序列,其可以被`completion signal`或异常所终止。根据reactive stream标准,存在三种signal,且信号会转化为对下游`onNext`、`onComplete`、`onError`的调用。 + +Flux是一个通用的reactive类型,并且,所有的event type都是可选的。 +- 当没有`onNext`事件但是存在`onComplete`事件,代表一个空的有限序列 +- 当`onNext`和`onComplete`事件都不存在时,代表一个空的无限序列 +- 无限序列并不一定为空,例如`Flux.interval(Duration)`会产生一个`Flux`,其是无限的并且发送tick + +### Mono `0...1` +`Mono`是一个标准的`Publisher`,其通过`onNext`信号发送至多一个item,然后通过`onComplete`信号结束(成功场景);或直接通过`onError`信号结束(失败场景)。 + +大多数Mono实现在调用完subscriber的`onNext`方法之后,预计会立马调用subscriver的`onComplete`方法。但是,`Mono.never`是一个例外,其并不会发送任何信号,并且其`onNext`和`onError`的组合是被明确禁止的。 + diff --git a/spring/webflux/image.png b/spring/webflux/image.png new file mode 100644 index 0000000..d3483ee Binary files /dev/null and b/spring/webflux/image.png differ