SlideShare a Scribd company logo
Building real-time apps with WebSockets
Peter Himschoot
peter@u2u.net




U2U
Building real-time apps with WebSockets
Building real-time apps with WebSockets
“Real time web” is
                             awesome!!!




“A real pain to build”
Ian Hickson
Server




          Client



          Server


“Comet”



           Client
a socket that works anywhere across the web
…even through network intermediaries
Building real-time apps with WebSockets
Building real-time apps with WebSockets
Building real-time apps with WebSockets
public class GameHttpHandler : IHttpHandler
{
  public void ProcessRequest(HttpContext context)
  {
    if (context.IsWebSocketRequest)
    {
      var player = new GamePlayer();
      FourInABruGame.Join(player);
      context.AcceptWebSocketRequest(player.SocketReceiver);
    }
  }
public async Task SocketReceiver(AspNetWebSocketContext context)
{
  var socket = context.WebSocket as AspNetWebSocket;
  var buffer = new ArraySegment<byte>(new byte[2048]);
  while (true) {
    var message =
      await socket.ReceiveAsync(buffer, CancellationToken.None);
    // Convert to JSON
    var json = Encoding.UTF8.GetString(buffer.Array, 0, message.Count);
    var test = new { type = "" };
    test = JsonConvert.DeserializeAnonymousType(json, test);
public async Task SendMessage(SocketMessage message)
{
  string json = JsonConvert.SerializeObject(message);
  var buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(json));
  await Context.WebSocket.SendAsync(buffer, WebSocketMessageType.Text,
      endOfMessage: true, cancellationToken: CancellationToken.None);
}
Building real-time apps with WebSockets
Building real-time apps with WebSockets
“ws://servername/socket”
                              “wss://servername/socket”



var ws = new WebSocket(socketUri);
ws.openStateConst = WebSocket.OPEN;
ws.onopen = function () {
  display('Connected');
}

ws.onmessage = function (json) {
 processMessage(json);
}

...
ws.send(JSON.stringify({ type: "wins", player: player }));
Demo
Building real-time apps with WebSockets
http://aka.ms/mbl-tech

http://aka.ms/mbl-tech/devprev

http://aka.ms/mbl-tech/html5
Building real-time apps with WebSockets
Building real-time apps with WebSockets

More Related Content

Building real-time apps with WebSockets

  • 5. “Real time web” is awesome!!! “A real pain to build”
  • 7. Server Client Server “Comet” Client
  • 8. a socket that works anywhere across the web …even through network intermediaries
  • 12. public class GameHttpHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { if (context.IsWebSocketRequest) { var player = new GamePlayer(); FourInABruGame.Join(player); context.AcceptWebSocketRequest(player.SocketReceiver); } }
  • 13. public async Task SocketReceiver(AspNetWebSocketContext context) { var socket = context.WebSocket as AspNetWebSocket; var buffer = new ArraySegment<byte>(new byte[2048]); while (true) { var message = await socket.ReceiveAsync(buffer, CancellationToken.None); // Convert to JSON var json = Encoding.UTF8.GetString(buffer.Array, 0, message.Count); var test = new { type = "" }; test = JsonConvert.DeserializeAnonymousType(json, test);
  • 14. public async Task SendMessage(SocketMessage message) { string json = JsonConvert.SerializeObject(message); var buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(json)); await Context.WebSocket.SendAsync(buffer, WebSocketMessageType.Text, endOfMessage: true, cancellationToken: CancellationToken.None); }
  • 17. “ws://servername/socket” “wss://servername/socket” var ws = new WebSocket(socketUri); ws.openStateConst = WebSocket.OPEN;
  • 18. ws.onopen = function () { display('Connected'); } ws.onmessage = function (json) { processMessage(json); } ...
  • 20. Demo

Editor's Notes

  1. Scalability issuesProgramming modelCOMET technique (http://en.wikipedia.org/wiki/Comet_(programming)) Long PollingHidden iFrame
  2. Nicer way to do what we are doing today (Fb, twitter)New stuff that you can’t do todayNetwork intermediariesProxys Firewalls Gateways