Internet of things è vista come una possibile evoluzione dell'uso della Rete. Gli oggetti si rendono riconoscibili e acquisiscono intelligenza grazie al fatto di poter comunicare dati su se stessi e accedere ad informazioni aggregate da parte di altri. Partendo da queste affermazioni il talk preenterà una soluzione per il controllo ed il monitoraggio centralizzato dello stato di un sistema embedded a cui sono collegati una rete di sensori e di attuatori di varia natura attraverso l'utilizzo di SignalR. Tramite questa tecnologia è possibile realizzare servizi di notifica "push" con una straordinaria reattività, il tutto utilizzando il puro e semplice http
4. NetMF@Work
Gli utenti vogliono le ultime informazioni, ORA !
Twitter – live searches/updates
Stock streamers
Auctions
Live scores
Real-time notifications
Interactive games
Collaborative apps
Live user analytics
.
Perché real-time e come ?
5. NetMF@Work
HTTP is an old beast…
Never designed for real-time communications
Web is request-response
Web is stateless
HTML5 WebSockets to the rescue, right?
Perché real-time e come ?
Extension to HTTP
Provide raw sockets
over HTTP
Full-duplex
Traverses proxies
It’s still a draft…
Not every proxy server supports it
Not every webserver supports it
Not every browser supports it
They are raw sockets!
6. NetMF@Work
Come implementare il real-time con HTTP:
• Polling.
• Long Polling.
• Forever Frame.
• Server Sent Events
Perché real-time e come ?
7. NetMF@WorkPerché real-time e come ?
Polling: the stubborn approach
Server
Client
Time: requests event ‘n’ seconds (fixed time)
Request
Response
delay
Twitter clients
8. NetMF@Work
Polling
• High overhead on requests: headers and
such…
• High overhead on response: same as before…
• High latency.
• Waste of bandwith.
• Waste of resources.
Perché real-time e come ?
9. NetMF@WorkPerché real-time e come ?
Long Polling: the kind gentleman approach
Server
Client
Time: requests event ‘n’ seconds (variable)
Request
Response
Variable delay
Facebook chat
10. NetMF@Work
Long Polling (Hanging GET)
• High overhead on requests: headers and
such…
• High overhead on response: same as before…
• Medium latency.
• Waste less of bandwith.
• Waste of resources.
• Better than the previous one: less requests
Perché real-time e come ?
11. NetMF@WorkPerché real-time e come ?
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
• Server tells client that response is chuncked
• Client keeps connection open untill server closes it
• Server pushes data to the client followed by 0
• Consumes server threads
<script>eval("... ")</script>0
<script>eval("... ")</script>0
Forever Frame
12. NetMF@Work
Server-Sent Events
• Server-Sent Events (SSE) are a standard describing
how servers can initiate data transmission towards
clients once an initial client connection has been
established. They are commonly used to send message
updates or continuous data streams to a browser client
and designed to enhance native, cross-browser
streaming through a JavaScript API called EventSource,
through which a client requests a particular URL in order
to receive an event stream.
Stream Updates with Server-Sent Events
Perché real-time e come ?
14. NetMF@Work
• Persistent Connection Abstraction communication
library.
• Abstracts protocol and transfer (choses the best one).
• A single programming model (a unified development
experience).
• Extremely simple to use.
• Server-side it can be hosted in different «environments»
(ASP.NET, console apps, windows services, etc…).
• Client-side there’s support for: Javascript clients, .NET
clients, WP; provide by the community: iOS, Android.
SignalR
15. NetMF@Work
• Works everywhere !!!
• Try WebSocket then fallback to:
• Server Sent Events
• Forever Frame
• Long Polling
• Bet to keep the logic connection up include retry
logic
• Scale out to web-farms
SignalR
16. NetMF@Work
• Complete rewrite of the internals for 1.0.0
• Very hight performance on a single box
100.000’s of messages per seconds
• Very low memory overhead
• Full async
• 1000’s of connection per server
• Cross-platform: run it on OSX or Linux with
Mono
• Supported part of ASP.NET family
SignalR
17. NetMF@Work
Persistent Connections: «Low level» API,
manages the connection and the «raw» stream of
data.
Hubs: «High level» API, provide advanced support
for internal routing (calling functions on server &
clients), connection and disconnection tracking,
grouping etc… Automatic client proxy generation
(JavaScript)
SignalR
19. NetMF@Work
Core
• Microsoft.AspNet.SignalR.Core: Server side components needed to
build SignalR endpoints
Meta package
• Microsoft.AspNet.SignalR: - A meta package that brings in everything
you need to run it on IIS and ASP.NET
Hosts
• Microsoft.AspNet.SignalR.SystemWeb - Pulls in the required
packages to host SignalR in ASP.NET (via OWIN ASP.NET host)
• Microsoft.AspNet.SignalR.Owin - OWIN* host for SignalR
* OWIN stands for “Open Web Interface for .NET” and it is a specification for
the communication between .NET Web Server and Web applications.
SignalR packages
20. NetMF@Work
Clients
• Microsoft.AspNet.SignalR.Js - Javascript client for SignalR
• Microsoft.AspNet.SignalR.Client - .NET client for SignalR (includes
WinRT, Windows Phone 8 and Silverlight5 clients)
Scaleout Buses
• Microsoft.AspNet.SignalR.Redis - Redis scaleout for SignalR
• Microsoft.AspNet.SignalR.ServiceBus - Service bus scaleout for
SignalR
Sample
• Microsoft.AspNet.SignalR.Sample - A sample stock ticker you can
quickly and easily bring into your app to get a working sample up and
running.
SignalR packages