§Reactive Streams integration (experimental)
Play experimental libraries are not ready for production use. APIs may change. Features may not work properly.
Reactive Streams is a new standard that gives a common API for asynchronous streams. Play 2.4 introduces some wrappers to convert Play’s Iteratees and Enumerators into Reactive Streams objects. This means that Play can integrate with other software that supports Reactive Streams, e.g. Akka Streams, RxJava and others.
The purpose of the API is:
- to check that the Reactive Streams API is powerful enough to express Play iteratees and enumerators
- to test integration between Play and Akka Streams
- to provide stream conversions needed by the experimental Akka HTTP server backend
- to test out an API.
This API is highly experimental. It should be reasonably free of bugs, but its methods and classes and concepts are very likely to change in the future.
§Known issues
- No Java API. This shouldn’t be hard to implement, but it hasn’t been done yet.
- The implementation hasn’t been tested against the Reactive Streams test suite so there may be some conformance issues.
- May need to lift
Input
events into the stream to ensure thatInput.EOF
events cannot be lost and to provide proper support forInput.Empty
. At the moment there is the potential for event loss when adapting iteratees and enumerators. - No performance tuning has been done.
- Needs support for two-way conversion between all the main stream and iteratee types.
- Documentation is limited.
§Usage
Include the Reactive Streams integration library into your project.
libraryDependencies += "com.typesafe.play" %% "play-streams-experimental" % "2.6.12"
All access to the module is through the Streams
object.
Here is an example that adapts a Future
into a single-element Publisher
.
val fut: Future[Int] = Future { ... }
val pubr: Publisher[Int] = Streams.futureToPublisher(fut)
See the Streams
object’s API documentation for more information.
For more examples you can look at the code used by the experimental Akka HTTP server backend. Here are the main files where you can find examples:
Next: Play 2.3