Building real-time apps with WebSockets
- 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);
}
...
Editor's Notes
- Scalability issuesProgramming modelCOMET technique (http://en.wikipedia.org/wiki/Comet_(programming)) Long PollingHidden iFrame
- Nicer way to do what we are doing today (Fb, twitter)New stuff that you can’t do todayNetwork intermediariesProxys Firewalls Gateways