Se crea una conexión para bajar contenido desde el servidor y muchas otras a medida que se quiere subir contenido.
Mucho overhead en la creación de multiples conexiones HTTP(S) cuando se podría utilizar uno solamente.
Cliente debe gastar recursos en mapeo entre lo que envía y lo que recibe para mantener coherencia
Dificultad para crear conexiones con sockets distinto al puerto 80 en ambientes controlados por firewall.
Servidor no se puede comunicar con cliente si no es con petición explicita de este
Modelo de aplicación WEB que simula conexión única con servidor. Muy costosa, poco escalable y muy poco trivial en su implementaión
Conexión full-duplex,única sobre TCP.
Inicia conexión HTTP(S) por puerto 80 (443).
Realiza upgrade de la conexión y deja de ser HTTP.
Servidor queda habilitado para enviar contenido sin que cliente lo pida.
Esto también se denomina "WebSocket Handshake" y se compone de un "Opening handshake" y un "Closing Handshake"
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Sec-WebSocket-Key
Origin
Sec-WebSocket-protocol
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Status line: HTTP/1.1 101 Switching Protocols
Sec-WebSocket-Accept: si base64 no calza con la esperada no se realiza la conexión
Connection: Upgrade, si no viene, no se crea conexión
Sec-WebSocket-protocol
Puede ser cerrada por cualquiera de las partes
Frame puede contener la razón de cierre y estas no necesitan ser legible por humanos
No se deben enviar más frames de datos después de enviado el close frame
Close frame es devuelto (echo)
Cuando ya se ha enviado y recibido el close frame, se procede a cerrar la conexión TCP
No es parte de HTML5
Forma de uso
Crear objeto WebSocket
Abrir conexión
Definir evento de recepción de mensaje (websocket.onmessage)
Definir evento de envío de mensajes (websocket.send)
Comunicarse
Cerrar WebSocket cerrando el browser o con websocket.close
Todos los últimos browser admiten la más reciente especificación de WebSockets (RFC 6455) menos Android Browser.
Firefox 11 (PC y Android)
Chrome 16 (PC, Mobile)
Safari 6 (Max, iOS)
Opera (PC, Mobile)
Internet Explorer 10
/
#