§Reactive Streams 集成(实验性)
Play 实验性库尚未准备好用于生产环境。API 可能发生变化。功能可能无法正常工作。
Reactive Streams 是一种新的标准,它为异步流提供了一个通用 API。
Play 2.4 引入了一些包装器,用于将 Play 的 Iteratees 和 Enumerators 转换为 Reactive Streams 对象。这意味着 Play 可以与支持 Reactive Streams 的其他软件集成,例如 Akka Streams、RxJava 和 其他。
API 的目的是
- 检查 Reactive Streams API 是否足够强大,可以表达 Play iteratees 和 enumerators
- 测试 Play 和 Akka Streams 之间的集成
- 提供实验性 Akka HTTP 服务器后端 所需的流转换
- 测试 API。
此 API 高度实验性。它应该相当没有错误,但它的方法、类和概念很可能在将来发生变化。
§已知问题
- 没有 Java API。这并不难实现,但尚未完成。
- 该实现尚未针对 Reactive Streams 测试套件进行测试,因此可能存在一些符合性问题。
- 可能需要将
Input
事件提升到流中,以确保Input.EOF
事件不会丢失,并为Input.Empty
提供适当的支持。目前,在调整 iteratees 和 enumerators 时,存在事件丢失的可能性。 - 尚未进行性能调优。
- 需要支持所有主要流和 iteratee 类型之间的双向转换。
- 文档有限。
§用法
将 Reactive Streams 集成库包含到您的项目中。
libraryDependencies += "com.typesafe.play" %% "play-streams-experimental" % "3.0.x"
所有对模块的访问都通过 Streams
对象进行。
以下是一个将 Future
调整为单元素 Publisher
的示例。
val fut: Future[Int] = Future { ... }
val pubr: Publisher[Int] = Streams.futureToPublisher(fut)
有关更多信息,请参阅Streams
对象的 API 文档。
有关更多示例,您可以查看实验性Akka HTTP 服务器后端使用的代码。以下是您可以找到示例的主要文件
下一步:Play 2.3
发现此文档中的错误?此页面的源代码可以在此处找到。阅读文档指南后,请随时贡献拉取请求。有疑问或建议要分享?前往我们的社区论坛与社区进行对话。