端到端反应流 RESTful 服务(a.k.a。HTTP 背压)

End-to-End Reactive Streaming RESTful service (a.k.a. Back-Pressure over HTTP)

我一直在网上尝试澄清这个问题一段时间但没有成功,所以我会尝试在这里提问。

我想找到一些资源或示例,其中展示了如何构建端到端的完全背压 REST 服务 + 客户端。我的意思是,我希望看到,如果有一个实现 Reactive Streams 的 REST 客户端(无论是在 Akka、JS 还是其他语言中),我将(并且能够 "visualise")处理背压整个构建的 REST 服务器,例如使用 Akka-Http。

明确地说,我正在搜索类似以下演讲的内容(但我找不到幻灯片或视频来确认):http://oredev.org/2014/sessions/reactive-streaming-restful-applications-with-akka-http

我对我看到的大多数例子的怀疑是关于我可以找到很多 REST 服务(服务器)在后端使用 Akka Http 和 Akka 流的情况,但我不确定背压是"communicated" 通过 HTTP 和 REST,如果客户端正在实施 Reactive Streams。在这种情况下,我会在 TCP/HTTP 上桥接一个 "stream" 还是只有 2 个独立的流?这是我主要的疑惑和困惑。

希望我说得足够清楚,希望有人能够阐明这件事。
无论如何,谢谢!

你来对地方问 Akka 问题了:-)

我知道有两个演讲演示了在使用 http 时背压机制是如何真正工作的。

1)一个是Roland Kuhn’s talk on ScalaDays SF 2015: http 演示的背压在本次演讲的第 44 分钟左右开始。

2) My talk from ScalarConf Warsaw 2015。流部分大约从 18 分钟开始, 背压演示出现在第 24 分钟左右。它显示了一个“快速处理”和“慢速处理”服务器,您可以在其中看到 curl 客户端在上传文件时被背压(我以一个文件为例,因为它是一个很好的“大请求”)。

由于 TCP 的内置机制,背压传播到客户端 - 在服务器端,我们根本不从套接字读取 直到需求可用,这会导致背压被正确传播。

希望对您有所帮助!