Aplicaciones Real-Time con SignalR

Post on 25-Jul-2015

577 views 2 download

Transcript of Aplicaciones Real-Time con SignalR

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?

Contacto

Mail: rodolfof@lagash.com

Blogs: http://shockbyte.net

Twitter: @rodolfof

¡Gracias!