The way to HTML5
The way to HTML5
FD
FD
 $.ajax(‘http://localhost/do_sth/’,{
     ‘type’:‘GET’,
     ‘dataType’:‘json’,
     ‘success’:function(data){
         console.log(data);
     }
 });
var ws_uri = "ws://localhost:9999";

if ("WebSocket" in window) {
    webSocket = new WebSocket(ws_uri);
}else if("MozWebSocket" in window) {
    // Firefox 7/8
    webSocket = new MozWebSocket(ws_uri);
}

webSocket.onmessage = function(e) {
    console.log("Got echo: " + e.data);
}
HTTP
debug, WPO
HTTP
   debug, WPO

WebSocket
HTTP
HTTP
   debug, WPO

WebSocket
HTTP



   new WebSocket(ws_uri)
WebSocket protocol
             protocol
WebSocket server
WebSocket API
WebSocket API

 API
       WebSocket
WebSocket API

  API
          WebSocket

var ws_uri = "ws://localhost:9999";

webSocket = new WebSocket(ws_uri);

webSocket.onmessage = function(e) {
    console.log("Got echo: " + e.data);
}
WebSocket API




WebSocket API       WebSocket Protocol
WebSocket Protocol



 10       chrome 14+ , firefox 7+



chrome blog
WebSocket Protocol



 10       chrome 14+ , firefox 7+



chrome blog
WebSocket Protocol

overview:




                        “      ”
            API             onmessage
                  API
WebSocket Protocol

overview:
                      frame
            frame
  message                 frame
    message                   frame
               message
WebSocket Protocol

overview:
  frame          WebSocket Protocol


    raw data,           raw data
            message
    ( control frame )
WebSocket Protocol

HandShake:
WebSocket Protocol

HandShake:
             GET
 WebSocket            HTTP Header
     origin , WebSocket Version ,
 WebSocket Key , Cookies

 Connection: Upgrade
 Upgrade: websocket
               WebSocket
WebSocket Protocol

HandShake:

                       HTTP/1.1 101
 Switching Protocols


 Connection: Upgrade
 Upgrade: websocket
             websocket
WebSocket Protocol

HandShake:




     Sec-WebSocket-Protocol: chat
             subprotocol


为
WebSocket Protocol

HandShake:




 Sec-WebSocket-Origin: http://work
      server
WebSocket Protocol

HandShake:



 Sec-WebSocket-Origin: http://work
      server

 Sec          HTTP Header
 javascript
WebSocket Protocol

HandShake:



        server        client
             client   websocket
 hankshake                     XHR
 form
WebSocket Protocol

HandShake:
               server
 HandShake     HTTP header
 Sec-WebSocket-key,
   "258EAFA5-E914-47DA-95CA-
 C5AB0DC85B11"
              SHA-1 hash ,
 base64-encode ,        Response
 Header      “Sec-WebSocket-
WebSocket Protocol

HandShake:


                              WebSocket




                         Python
git checkout handshake
WebSocket Protocol

frame      :
WebSocket Protocol

frame      :
WebSocket Protocol

frame          :



 FIN 1bit,                message

 RSV0   RSV1       RSV2      1bit,
                      0

 opcode: 4bit,                payload data
WebSocket Protocol

frame          :



 FIN 1bit,                message

 RSV0   RSV1       RSV2      1bit,
                      0

 opcode: 4bit,                payload data
WebSocket Protocol

      frame           :

opcode

  *    %x0 denotes a continuation frame
       FIN 1bit,              message
  *    %x1 denotes a text frame
  *    %x2 denotes a binary frame
       RSV0   RSV1      RSV2         1bit,
  *    %x3-7 are   reserved for   further non-control frames
                            0
  *    %x8 denotes a connection close
  *    %x9 denotes a ping
       opcode: 4bit,                  payload data
  *    %xA denotes a pong
  *    %xB-F are reserved for further control frames
WebSocket Protocol

frame           :
 mask: 1bit ,        payload data
    1               masking-key
                              1

 payload length: 7 bits , 7+16bits , or 7+64
 bits    7bit          0 -125
                       126            2byte
                    127             4byte


 Masking-Key: 0 or 4 bytes. mask 0          key
        0        mask     1 key         4
 bytes
WebSocket Protocol

frame         :


 Payload data: (x+y)bytes , payload data


 Extension data: x bytes,      0


 Application data: y bytes ,       payload
 data
WebSocket Protocol

frame      :


                  WebSocket


 server

               frame
WebSocket Protocol

more :



                  http://
 tools.ietf.org/html/draft-ietf-hybi-
 thewebsocketprotocol-10
Python: Autobahn
Node.js : http://socket.io/#home
Ruby : https://github.com/gimite/
web-socket-ruby
Java: https://github.com/
TooTallNate/Java-WebSocket
Q&A

Websocket protocol overview