A project exemplifying client / server communications with Monix.
Switch branches/tags
Clone or download
Latest commit 19b5556 Apr 3, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
client/src/main/scala/client Update dependencies Apr 3, 2017
project Update dependencies Apr 3, 2017
server Fix compilation Apr 3, 2017
shared/src/main/scala/shared/models Add working implementation Sep 6, 2015
.gitignore Add working implementation Sep 6, 2015
.java-version Initial commit Aug 29, 2015
LICENSE Initial commit Aug 29, 2015
README.md Change version Apr 3, 2017
build.sbt Cleanup build.sbt Apr 3, 2017

README.md

Monix Client/Server Sample

Sample of a mixed client/server application demonstrating the streaming of values over web-socket, both simple and with back-pressure applied (by means of the Reactive Streams protocol), using Monix for both the server and the client ;-)

See: monix-sample.herokuapp.com

Gitter

Overview of the code:

NOTES:

  • we are exposing 2 versions of webSocket connections, one that is back-pressured as a matter of the server-side protocol and one that is not
  • both versions are protected by buffers that start dropping events in case the client is too slow, but the difference is that for the back-pressured version the buffer is being maintained server-side
  • by applying back-pressure in the protocol, the server is informed of the rate at which the client can consume and thus there is no risk for the server in case we've got clients that are too slow; on the other hand for the simple version the server can be crashed on clients that are too slow in receiving their events, as that actor's mailbox is unbounded
  • the back-pressured version needs server-side cooperation / implementation and is thus more difficult to develop

In order to develop and execute the project locally:

sbt run

For Heroku deployment:

sbt stage deployHeroku

The project is based on the cool play-with-scalajs-example template by @vmunier, so you get the auto-reload coolness of Play in combination with Scala.js.

~;Enjoy