Working with WebSockets in Perl

4,563 views
4,263 views

Published on

WebSockets are the the juicy part of the HTML5 specification. They promise the solution to the edgy real-time web communication. But how widespread are they and what are the technologies that can safely replace them in older browsers?

This talk is about the current state of WebSockets and how to use them from Perl applications with some fun live examples.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,563
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Working with WebSockets in Perl

  1. 1. Working with WebSockets in Perl Viacheslav Tykhanovskyi (vti) October 19, 2012
  2. 2. THIS IS NOT IN RUSSIA!!1
  3. 3. Brazil 2012
  4. 4. Serious stuff
  5. 5. HTML5First draft in 2008
  6. 6. WebSocketsfull duplex and persistent tcp connections
  7. 7. HTTP/1.1 handshakeClient – Frames – Server
  8. 8. var ws = new WebSocket(’ws://localhost’);ws.onmessage = function(e) { var message = e.data; alert(’Got new message: ’ + message);};ws.send(’Hello, world!’);
  9. 9. RFC 6455
  10. 10. Once upon a time...
  11. 11. Draft 75 (hixie)
  12. 12. Draft 76 (00-hybi)Sec- and challenge (proxy fail)
  13. 13. 10-hybiNew frame!
  14. 14. x00DATAxff
  15. 15. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+ −+ −+ − − − −+ − − − − − − − − − − − − − − − − − − − − − −+ −+ −+ − − − −+ − − − − − − −+ − − − − − − − − − − − − − − −| F | R | R | R | o p c o d e |M| P a y l o a d l e n | Extended payload l e n g t h || I |S|S|S| (4) |A| (7) | (16/63) ||N|V|V|V| |S| | ( i f p a y l o a d l e n ==126/127) || |1|2|3| |K| | |+ −+ −+ − − − −+ − − − − − − −+ −+ − − − −+ − − − − − − −+ − − − − − − − − − − − − − − − +| E x t e n d e d p a y l o a d l e n g t h c o n t i n u e d , i f p a y l o a d l e n == 127 |+−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−− − − − − − − − − − − − − − − − −+| | Masking−key , i f MASK s e t t o 1 |+ − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − −+ − − − − − − − − − − − − − − − −+ − − − − − − − − − − − − − − −| Masking−k e y ( c o n t i n u e d ) | P a y l o a d Data |+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− + −−−−−−−−−−−−−−−−: P a y l o a d Data c o n t i n u e d . . . :+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− +| P a y l o a d Data c o n t i n u e d . . . |+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − −+
  16. 16. Sec-WebSocket-Version: 8
  17. 17. 17-hybi (RFC 6455)Sec-WebSocket-Version: 13
  18. 18. BrowsersThe things start to get serious
  19. 19. D r a f t #75−−−−− −−−−Chrome 5S a f a r i 5.0Android 2. xD r a f t #76−−−−− −−−−F i r e f o x 4b ( d i s a b l e d )Safari 5.0.2Chrome 6−13Opera 10.70 ( d i s a b l e d )iOS 4.2D r a f t #10−−−−− −−−−F i r e f o x 10Chrome 14RFC 6455−−−− −−−−Chrome 14+F i r e f o x 10+I E 10
  20. 20. Special cases
  21. 21. Firefox 7Connection:keep-alive, Upgrade
  22. 22. HAProxyRead handshake headersWrite handshake headers Read the body part Accept the handshake
  23. 23. Perl implementations
  24. 24. MojoliciousRFC 6455
  25. 25. Protocol::WebSocket (Dancer, Net::Async::WebSocket, Web::Hippie)75, 76 (00), 10, 17, RFC 6455 + browser workarounds
  26. 26. WebSocket fallbacks
  27. 27. Flashhttps://github.com/gimite/web-socket-jsRequires policy server (843 port or inline)
  28. 28. Socket.IO http://socket.io/PocketIO — Perl implementation
  29. 29. SockJShttps://github.com/sockjs/sockjs-client SockJS-Perl — Perl implementation
  30. 30. Examples
  31. 31. 1. Protocol::WebSocket console
  32. 32. 2. Showmethedrawing
  33. 33. 3. Showmetheshell
  34. 34. Obrigado!

×