dai*_*lee 10 http project-reactor reactive-streams reactive spring-webflux
我对 Reactive Stream 有点陌生,所以在使用Spring Webflux和Reactor时遇到了一个问题。
我制作了一个如下所示的片段:
@RestController
public class TestController {
@GetMapping("responsebody/flux")
public Flux<String> tt2() {
return Flux.range(1, 5)
.delayElements(Duration.ofMillis(1000))
.map(l -> "hi");
}
}
Run Code Online (Sandbox Code Playgroud)
而且,有趣的是,镶边分别显示序列中的每个元素,而不是当我仅使用浏览器请求时一次公开所有元素。(但开发工具立即显示全身)
但我想知道,即使 HTTP 1 只使用一个连接,并且服务器发送的数据放在 HTTP 协议的正文中,它是如何工作的。客户端如何知道哪个元素分隔每个元素以及序列何时完成?如果客户端还没有准备好使用反应流怎么办?
我不需要任何使用反应式库的代码,但想知道协议是如何工作的。
如果客户端还没有准备好使用反应流怎么办?
客户不知道“反应流”。
您想知道的行为是通过分块传输编码机制实现的。当客户端向服务器发送请求时,服务器会返回标头transfer-encoding: chunked
客户端开始以块的形式接收数据。数据以一系列块的形式发送。
在这种情况下,Content-Length 标头被省略,并且在每个块的开头添加十六进制格式的当前块的长度,后跟“\r\n”,然后是块本身,后跟另一个“\r\n” '。终止块是常规块,但其长度为零。接下来是预告片,它由一系列(可能是空的)标头字段组成。
归档时间: |
|
查看次数: |
1287 次 |
最近记录: |