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

zmienne zapotrzebowanie na zasoby

↑        $$

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