Reaktywne aplikacje z WebSockets
Przemysław Piotrowski
Software Engineer

@ppiotrow
Plan
- fundamenty budowy Reaktywnych Aplikacji
- jak WebSockets mogą pomóc
wprowadzenie do Scala, Akka, Play
Uwaga na status eksperymentalny
Aukcje groszowe
zegar odlicza czas do końca aukcji
podbicie ceny o ,,grosz":
- kosztuje wirtualną walutę
- resetuje zegar
zwycięzca kupuje przedmiot za ostateczną cenę
TV za 3 500 PLN,
ostateczna cena 500 PLN,
podbicie 3BID, (1BID ~ 10gr)
500*100*3*0.1 = 15 000PLN

Przykład



Reactive Manifesto
zbiór wytycznych ?
,,buzz-words" ?
EventMessage driven
- asynchroniczna
- bez blokowania
- loose coupling
- izolacja (współdzielona pamięć)
- przejrzystość lokalizacji
WebSockets
JS API
ws = new WebSocket "ws://localhost:9000/item/121212"
ws.onopen = () ->
ws.send("INIT")
ws.onmessage = (msg) ->
data = JSON.parse msg.data
businessLogic(data)
ws.onclose = () ->
disconnected()
ws.onerror = () ->
disconnected()
...
ws.close()WebSockets
vs HTTP
- obustronne
- trwałe
{intense, long} pooling- lekkie

websocket.org
Akka
- komunikacja przez wiadomości
- przejrzystość lokalizacji
class EchoActor extends Actor {
def receive = {
case Ping =>
sender ! Pong
}
}
object EchoActor {
case object Ping
case object Pong
}
ScalableElastic
Akka
- clustering
- shard
- distributed pub-sub

Cluster
Node :9000
Node :9001
Node :9002
Resilient
responsywność w przypadku awarii
umiejętność auto-naprawy
- watch
- websockets
- persistance
Responsive
- czas odpowiedzi
- informowanie o błędach
- zaufanie użytkowników do aplikacji


Linki i źródła
- reactivemanifesto.org
- github:ppiotrow/confitura-websockets
- playframework.com/documentation/2.4.x/ScalaWebSockets
- doc.akka.io/docs/akka/2.3.11/
- scala/persistence.html,
- scala/cluster-usage.html,
- contrib/cluster-sharding.html
- contrib/distributed-pub-sub.html
- stackoverflow.com/questions/6224771/disadvantages-of-websockets
- http://dreamatico.com/data_images/heaven/heaven-1.jpg
Confitura WS
By Przemek Piotrowski
Confitura WS
Web sockets reactive applications
- 566