O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Game matching with SignalR

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 34 Anúncio
Anúncio

Mais Conteúdo rRelacionado

Semelhante a Game matching with SignalR (20)

Anúncio

Mais de Nicolò Carandini (20)

Mais recentes (20)

Anúncio

Game matching with SignalR

  1. 1. #TecHeroes loves GameDev Tour Game Matching with SignalR Nicolò Carandini [MVP] n.carandini@outlook.com @TPCWare
  2. 2. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Agenda • SignalR • Comunicare in Real Time • HTTP & HTLM5 / WebSockets • ASP.NET SignalR • Casi d’uso • Demo • Game Matching • Un po’ di teoria • Demo
  3. 3. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Comunicazione full duplex con HTTP ? Il protocollo HTTP prevede che il Client faccia una richiesta e il Server dia una risposta. Il Server non ha modo di mandare un messaggio al Client di sua iniziativa. INTERNET REQUEST INTERNET RESPONSE <HTML> Page
  4. 4. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Comunicazione real time tra clienti Se voglio comunicare tra vari client, quando il server riceve dati da un client, deve poter inviare dati agli altri client:
  5. 5. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Possibili soluzioni Polling Long Polling SERVER CLIENT tempo Request Response Request Response Request Response Request Response Request Response Intervallo di polling Intervallo di polling Intervallo di polling Intervallo di polling SERVER CLIENT tempo Request Response Request Response Request Response Response Request Request
  6. 6. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Controindicazioni? • Polling: Se l’intervallo è breve, troppe richieste inutili Se l’intervallo è lungo, le informazioni arrivano in ritardo • Long polling: Il Server deve gestire le richieste in modo asincrono altrimenti va in saturazione e non accetta altre richieste
  7. 7. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour HTLM5/WebSockets • Fanno parte delle specifiche di HTML5 • Estendono il protocollo HTTP fornendo il supporto alle raw sockets • Consentono la comunicazione full-duplex • Traversano gli HTTP proxies (solo se i proxies sono "moderni"…) Client Proxy Server / Firewall Origin Server
  8. 8. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Tutto risolto? Non proprio, perché HTML5/WebSocket è un protocollo di basso livello che richiede la scrittura di molto codice per implementare le funzionalità richieste da una applicazione real-time. Inoltre le condizioni d’uso delle WebSockets sono molto restrittive.
  9. 9. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Condizioni d’uso delle WebSockets Funzionano quando: • Il Web Server le supporta • Il Web browser le supporta • Il load balancer/reverse proxy le supporta • Il client proxy server/NAT le supporta • Tutto ciò che sta tra il client e il server le supporta
  10. 10. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour ASP.NET SignalR SignalR è la libreria ASP.NET che rende incredibilmente semplice aggiungere funzionalità Real-Time alle applicazioni web
  11. 11. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Punti di forza • Implementa, ove possibile, WebSockets. • Fa il downgrade in modo trasparente alle altre tecniche di polling • Fornisce una API di alto livello, molto semplice da usare, per fare RPC tra server e client • Offre funzionalità di gestione degli eventi di connessione e sconnessione e la gestione delle autorizzazioni
  12. 12. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Diagramma architetturale di SignalR
  13. 13. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour SignalR API PersistentConnection • Implementa le funzionalità minime necessarie • Consente l’invio e la ricezione di stringhe • Broadcast a tutti, a gruppi o a singoli utenti • Connessione, riconnessione e disconnessione Hub • Utilizza la PersistentConnection • Consente l’uso delle RPC da client a server e viceversa • Genera automaticamente i proxy RPC per i web client (in JavaScript)
  14. 14. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour PersistentConnection Vs. Hub Nella maggior parte dei casi si usa l’Hub. La PersistentConnection viene utilizzata nei seguenti casi: • Si usa un messaggio con formato custom • Si preferisce lavorare tramite invio di messaggi invece di utilizzare RPC (remote Procedure Call) • Occorre fare il porting a SignalR di un’applicazione preesistente che è basta sull’invio di messaggi e non usa le RPC
  15. 15. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour RPC (Remote Procedure Call) Si possono chiamare funzioni JavaScript lato client da codice .NET lato server, e viceversa
  16. 16. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Per fare cosa? Oltre ai classici scenari di chat, SignalR è perfetto per tutti quei casi in cui si abbia necessità di update ad alta frequenza, come nei giochi in real-time o implementare funzionalità di comunicazione full duplex all’interno di un applicativo. Interessante notare che Visual Studio (sin dalla versione 2013) usa SignalR per implementare la funzionalità di Browser Link.
  17. 17. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Visual Studio Browser Link
  18. 18. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Real Time Game: ShootR
  19. 19. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Demo ShootR
  20. 20. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Performances Throughtput • Un singolo server riesce a gestire da 100.000 a 500.000 messaggi al secondo. • Con un’occupazione di memoria estremamente ridotta. Scalabilità • Fully async • Circa 1.000 connessioni per server • Supporta la scalabilità orizzontale utilizzando un message bus (Service Bus, Redis, SQL)
  21. 21. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Scalabilità
  22. 22. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Client disponibili • JavaScript(jQuery) • .NET 4.x • Xamarin • UWP • iOS • Android • Java
  23. 23. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Next version: ASP.NET Core SignalR • Ancora in fase di sviluppo • Beta prevista per metà anno, RTM per fine anno • Tra le tante novità: • L’indipendenza da jQuery per il client Javascript • Invio/ricezione anche di binary data • Supporto di protocolli/formati multipli • Supporto di clienti WebSocket "puri" …e tanto altro ancora!
  24. 24. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Next version: ASP.NET Core SignalR
  25. 25. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Riferimenti ASP.NET SignalR 2.0 http://www.asp.net/signalr https://github.com/SignalR/SignalR ASP.NET Core SignalR https://blog.3d-logic.com/2017/01/15/signalr-core-part-13-design-considerations https://speakerdeck.com/davidfowl/introducing-asp-dot-net-core-sockets https://github.com/aspnet/SignalR
  26. 26. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Game Player Use Case diagram
  27. 27. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Match Making Activity diagram
  28. 28. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Match Making Sequence diagram
  29. 29. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Play Turn Activity diagram
  30. 30. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Play Turn Sequence diagram
  31. 31. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Demo Game Matching
  32. 32. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Game Matching per Unity • Poiché il game matching è piuttosto oneroso da sviluppare, per chi sviluppa giochi con Unity può essere (molto) conveniente utilizzare un servizio a pagamento come Unity Multiplayer: • Gratuito fino a 20 giocatori contemporaneamente in gioco • Con pagamento mensile in base al traffico prodotto • Per una stima dei costi mensili, basta andare sul sito di Unity: • https://unity3d.com/services/multiplayer
  33. 33. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Demo Estimate Your Monthly Bill
  34. 34. Roma, 27 Gennaio 2017#TecHeroes loves GameDev Tour Question Time…

×