Real-time fluent communication using
SignalR and Cloud
Radu Vunvulea
http://vunvulearadu.blogspot.com
{“name” : “Radu Vunvulea,“company” : “iQuest”,“userType” : “enthusiastic”“technologies” : [ “.NET”, “JS”, “Azure”, “Web”, “Mobile”, “SL” ],“blog” : “vunvulearadu.blogspot.com”,“email” : ”[email protected]”,“socialMedia” :
{“twitter” : “@RaduVunvulea”,
“fb” : “radu.vunvulea”}
}
Who am I?
Agenda
• What?• When?• Where?• How?• Why?
• Static Web• HTML & Request/Response
•Ajax• jQuery & Prototype
•Real Time Web• Real Time Libraries & Web Socket
Real Time Interaction
• Chat• Notifications• Weather• Stock market• Auction• Games• Monitoring• Dashboard• Document editing
• WebSocket• Forever Frame• Server Sent Events• Pooling• SPDY
What we can use?
What we can use? • Commet• Pusher• SockJS• SocketIO• Faye• Now.js• Sse• Django-sse• Cramp
What we can use? • Commet• Pusher• SockJS• SocketIO• Faye• Now.js• Sse• Django-sse• Cramp
SignalR
What is SignalR?
• Async library for .NET to help build real-time, multiuser interactive web applications• Bidirectional communication• Open Source• Adopted by Microsoft • GitHub
When we can use it?
• Server• Windows (.NET)• Mono
• Clients• Chrome• Firefox• Safari• IE• Opera• Android browser• IoS• Windows Desktop• Silverlight• Windows Store• Windows Phone• and old browsers
Connection methods
• WebSocket• Server Side Events• Forever Frame• Ajax long pooling
Persistent Connection
• Similar with WebSocket• Persistent• Events• Connect• Disconnect• Receive• Error
• Methods• Send• Broadcast
Hubs
• Over Connections• Share variables• Calls between client and server• Serialization• Capture connect/disconnect
• Everything works by magic
Hubs
• When you have multiple hubs• Same connection is shared by a client• Groups are maintain separately for each hub• One proxy JS file for all hubs
• Async support
• OnConnected• OnDisconnected• OnReconnected• proxy.State (JS) & Client.Caller (C#)
Hubs vs Persistent Connections
Hubs• Remote invocation
Persistent Connections• Message format needs
to be specified• Messaging and
dispatching model• An existing app is
ported to SignalR
Security
• Based on Connection Token (Connection Id + Username)
• Unique• Managed by server• Encrypted with a digital signature
• Connection Id • Exist until the end of connection
• Username• Only for authenticated users• Passed between client and server for each request
CSRF and SignalR
• Disable cross domain requests• Verify connection token• Put connection token query string• The connection token is not persisted on the client
Performance
• Single Box• Over 450.000 messages per second• 15.000 – 20.000 connection (hardware limitations –
ports)
• Web farm• You have “NO” limit• You need to synchronize each node from the farm
SignalR Farm
• Backplanes:• Windows Azure Service Bus• Redis• SQLServer
• Server broadcast• High-frequency realtime• Client to client
Conclusion
• SignalR• Client to Server• Server to Client• Broadcasting• Real Time application• Scalable• Low latency
Question
Answers