aplicaciones real-time con signalr
TRANSCRIPT
Aplicaciones Real-Timecon SignalR
Rodolfo FinochiettiMVP ASP.NET/IISLagash Systems
Agenda
• ¿Por que necesitamos aplicaciones real-time?
• ¿Que tecnologias tenemos disponibles para desarrollar aplicaciones real-time?
• SignalR• Connections y Hubs• Clients
• Preguntas
¿Por que necesitamos aplicaciones real-time?
¡Los usuarios quieren la información AHORA!
Twitter – live searches/updates Stock streamersAuctionsLive scoresReal-time notificationsInteractive gamesCollaborative appsLive user analytics…
6
¿Que tecnologias tenemos hoy?
HTTP no esta preparado…
Nunca se diseño para comunicaciones real-timeLa web es request-responseLa web es stateless
HTTP/1.1 200 OKContent-Type: text/plainTransfer-Encoding: chunked
Forever Frame
El server le dice al cliente que el response es chuncked El cliente mantiene la coneccion abierta hasta que el
servidor la cierra El servidor envia los datos al cliente seguido de un \0 Este proceso consume threads del servidor
Client
<script>eval("... ")</script>\0<script>eval("... ")</script>\0
Server
Periodic polling
Cada cierto tiempo el cliente pregunta si hay nuevos datos al servidor utilizando Ajax
El tiempo de latencia minimo esta determiando por el “polling interval”
Desperdicia ancho de banda y latencia
Polling interval
Client
Server
Long polling
El cliente pregunta pero el servidor no responde hasta que tenga datos nuevos para enviar
El cliente pregunta de nuevo cuando los datos son recibidos o despues de que hay una time out en al coneccion
Consume threads y conexiones del servidor
Client
Server
Server-Sent Events (SSE)
Es un standard HTML5 para manejo de eventos desde el Server al Cliente
Se utiliza el objeto EventSource en JavaScript
HTML5 WebsocketsExtensión de HTTP
Provee sockets sobre HTTP
Full-duplex
Funciona a través de proxies
No todos los proxy servers lo soportan
No todos los webserver lo soportan
No todos los browsers lo soportan
¡Son sockets!
En definitiva:¡Muchas opciones!
Long polling Periodic polling Forever Frame Server-Sent Events HTML5 WebSockets
R
¡SignalR al rescate!
SignalR
¡3 en uno! Conexiones “persistentes” entre cliente y servidor sobre el mejor transporte
Abstrae el modelo de poolling subyasente
Provee un solo modelo de programacion
SignalR Fallback
Long Polling
Forever Frames
Server Sent Events
Web Sockets
¿Como lo instalo?
¡NuGet!
install-package Microsoft.AspNet.SignalR
Demo: Hello SignalR
¿Que paso?
El servidor hizo broadcasting del mensaje cada pocos segundos
El cliente recibio los mensajes ¡El codigo para hacer esto esto es facil! No hay polling (por lo menos no en el codigo)
Dos modelos de conexión
PersistentConnection
Limitado a enviar mensajesEl usuario define el “protocolo”
HubAbstracción sobre PersistentConnectionSe pueden enviar mensajes y llamar a métodosSignalR define el protocolo
Demo: Connections
Demo: Knockout.js & SignalR
Demo: Hubs
Hubs Los metodos de un Hub se pueden llamar desde el cliente
Los metodos de un cliente se pueden llamar desde el servidor Se pueden llamar a clientes individuales Se pueden llamar todos clientes Se pueden llamar a grupos de clientes
Clientes
En el servidorSe puede hostear en cualquier aplicacion ASP.NETEn el clienteJavaScriptPero hay mas…
Clientes
En el servidor“SelfHost” (Microsoft.AspNet.SignalR.SelfHost)Windows Azure
En el clienteJavaScript (Microsoft.AspNet.SignalR.JS)Cualquier aplicacion .NET (Microsoft.AspNet.SignalR.Client)Cualquier dispositivo Windows PhoneiOSAndroid (https://github.com/SignalR/java-client)
Microsoft /web
®
Backplane
SignalR BackplanesBalanceo de carga a través de un mecanismo de transporte común
Load B
ala
nce
r
Resumen ¡3 en uno!
Conexiones “persistentes” entre cliente y servidor sobre el mejor transporte
Abtrae el modelo de poolling subyasente Provee un solo modelo de programacion
Connections & Hubs Soporte para muchos tipos de clientes
¿Preguntas?
¡Gracias!