Upgrade to Pro — share decks privately, control downloads, hide ads and more …

APPLICAZIONI IN REAL TIME CON LARAVEL

APPLICAZIONI IN REAL TIME CON LARAVEL

EVENTO LARAVEL PUGLIA MEET-UP - 11 FEBBRAIO 2020
https://www.facebook.com/events/849198835526514/

ABSTRACT
Il talk ha l'obiettivo di raccontarvi la mia esperienza nell'utilizzo sperimentale del servizio di broadcasting di Laravel per sviluppare applicazioni in real-time.

Il talk si costruirà a partire dalla dimostrazione pratica di un gioco sviluppato con Unity dove i partecipanti presenti potranno interagire in tempo reale con i propri smartphone.

L'obiettivo è introdurre l'architettura e i concetti alla base del servizio di broadcasting offerto da Laravel per lo scambio di messaggi in tempo reale.

Saranno ben accetti i vostri interventi, riflessioni, dubbi e curiosità durante lo svolgimento del talk.

BIOGRAFIA SPEAKER
- Giuseppe Toto -
Negli ultimi dieci anni ho maturato esperienze nel coordinamento e sviluppo di applicazioni web, mobile e gaming.

Metto a disposizione le mie competenze rivolte ad aziende e startup con forte picco di innovazione, aiutandole a crescere e a fare la differenza in un mercato in continua evoluzione.

Da grande appassionato di tecnologia, amo trasmettere la mia conoscenza, confrontarmi e imparare costantemente.

Supporto attualmente l'azienda Ai² (https://www.ai2.it) nello sviluppo tecnologico dei prodotti Swipe Story (https://www.swipe-story.com) nel settore dello storytelling games.

blog: https://giuseppetoto.it
linkedin: https://www.linkedin.com/in/giuseppe-toto-83888b33/

Giuseppe Toto

February 11, 2020
Tweet

More Decks by Giuseppe Toto

Other Decks in Programming

Transcript

  1. POOLING connessione aperta (request) TEMPO SERVER CLIENT dati (response) connessione

    chiusa dati (response) connessione chiusa connessione aperta (request) Protocollo http LEGENDA poll poll
  2. LONG POOLING connessione aperta (request) TEMPO SERVER CLIENT dati (response)

    Protocollo http LEGENDA waiting… Long poll Long poll connessione aperta (request) dati (response) connessione chiusa
  3. WEBSOCKET connessione creata TEMPO SERVER CLIENT dati (response) Protocollo http

    LEGENDA Protocollo ws dati (response) dati (response)
  4. BROADCASTING : OVERVIEW + CANALI INFINITI Public/subscribe pattern messaggio server

    publisher {CHANNEL NAME} pattern publish/subscribe subscribed subscriber Client 1 subscribed subscriber Client 2 subscribed subscriber Client N {CHANNEL NAME}
  5. CANALE PUBBLICO server subscribed subscribed subscribed Public/subscribe pattern publisher subscriber

    subscriber Subscriber GAME Client 1 Client 2 Client N publish/subscribe pattern messaggio
  6. CANALE PRIVATO server subscribed Public/subscribe pattern publisher subscriber subscriber Subscriber

    PRIVATE-ORDER-{ID} Client 1 Client 2 Client N publish/subscribe pattern messaggio
  7. CANALE PRESENCE server subscribed subscribed subscribed Public/subscribe pattern publisher subscriber

    subscriber Subscriber PRESENCE-{CITY}-ROOM Client 1 Client 2 Client N publish/subscribe pattern messaggio
  8. ARCHITETTURA GAME (public channel) API REST - LARAVEL PUSHER publisher

    UNITY CLIENT Subscriber websocket Subscribe(«game») Subscriber WEB CLIENT (laravel-echo) Giocatore 1 websocket Subscribe(«game») Giocatore 1 Giocatore n-simo WEB CLIENT (laravel-echo) Subscriber Invia un evento (DRIVER PUSHER)
  9. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket HTTP POST api/events/game-started
  10. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket App\Events\GameStarted broadcast HTTP POST api/events/game-started
  11. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket ricezione App\Events\GameStarted App\Events\GameStarted broadcast HTTP POST api/events/game-started
  12. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket HTTP POST api/events/user-joined
  13. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket App\Events\UserJoined broadcast HTTP POST api/events/user-joined
  14. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket App\Events\UserJoined ricezione warning App\Events\UserJoined broadcast HTTP POST api/events/user-joined
  15. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket HTTP POST api/events/question-displayed
  16. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket app/event/question-diplayed broadcast HTTP POST api/events/question-displayed
  17. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket app/event/question-displayed ricevono HTTP POST api/events/question-displayed app/event/question-diplayed broadcast
  18. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket HTTP POST api/events/user-chose-answer
  19. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket App\Events\UserChoseAnswer broadcast HTTP POST api/events/user-chose-answer
  20. ARCHITETTURA UNITY CLIENT WEB CLIENT (laravel-echo) game (public channel) Giocatore

    1 API REST - LARAVEL Giocatore n-simo WEB CLIENT (laravel-echo) Websocket PUSHER Subscriber Subscriber Subscriber publisher Websocket App\Events\UserChoseAnswer riceve App\Events\UserChoseAnswer broadcast HTTP POST api/events/user-chose-answer
  21. ARCHITETTURA CLIENT {channel} API REST - LARAVEL DB Request/Response HTTP

    evento Request/Response HTTP Websocket subscribe publisher Websocket CLIENT {channel} evento subscribe Websocket subscribe subscriber subscriber
  22. ALTERNATIVE A PUSHER Un servizio fatto in casa con: -

    REDIS (broker message) - NODE JS + SOCKET IO SERVER (websocket) - https://github.com/tlaverdure/laravel-echo-server
  23. RIFERIMENTI UTILI - BROADCASTING LARAVEL https://laravel.com/docs/6.x/broadcasting - COME IMPLEMENTARE UNA

    CHAT CON LARAVEL E PUSHER: https://pusher.com/tutorials/chat-laravel - LARAVEL ECHO SERVER (ALTERNATIVA A PUSHER): https://github.com/tlaverdure/laravel-echo-server - PUBLISH-SUBSCRIBE PATTERN https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern - OBSERVER VS PUB SUB PATTERN https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c