Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
de sockets a la Web
La especificacin WebSocket define un API que establece conexiones "socket"
entre un navegador web y un servidor. Dicho con otras palabras: existe una
conexin persistente entre el cliente y el servidor, y ambas partes pueden
empezar a enviar datos en cualquier momento.
Introduccin
Para abrir una conexin WebSocket, solo tienes que ejecutar el constructor
WebSocket:
var connection = new
WebSocket('ws://html5rocks.websocket.org/echo', ['soap',
'xmpp']);
Observa los elementos ws:. Este es el nuevo esquema de URL para las
conexiones WebSocket. Tambin hay wss:para conexiones WebSocket seguras,
de la misma forma que se utiliza https:para las conexiones HTTP seguras.
Adjuntar inmediatamente varios controladores a la conexin te permite saber
cundo est abierta la conexin, cundo ha recibido mensajes entrantes o
cundo hay un error.
El segundo argumento acepta subprotocolos opcionales. Puede ser una cadena
o una matriz de cadenas. Cada cadena debe representar a un nombre de
subprotocolo y el servidor acepta solo uno de los subprotocolos de la matriz.
Para determinar el subprotocolo aceptado, accede a la propiedad protocoldel
objeto WebSocket.
Los nombres de subprotocolos deben ser uno de los registrados en el registro de
IANA. A fecha de febrero de 2012, solo hay un nombre de subprotocolo
registrado (soap).
// When the connection is open, send some data to the server
connection.onopen = function () {
connection.send('Ping'); // Send the message 'Ping' to the
server
};
// Log errors
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
Servidores proxy
Toda nueva tecnologa trae consigo una nueva serie de problemas. En el caso de
WebSocket, se trata de la compatibilidad con los servidores proxy que median
las conexiones HTTP en la mayora de las redes corporativas. El protocolo
WebSocket utiliza el sistema de actualizacin de HTTP (normalmente utilizado
para HTTP/SSL) para "actualizar" una conexin HTTP a una conexin
WebSocket. A algunos servidores proxy no les gusta esto y cancelan la conexin.
Por tanto, aunque un cliente dado utilice el protocolo WebSocket, es posible que
no pueda establecer una conexin. Esto hace que la siguiente seccin sea an
ms importante :)
En el servidor
Al utilizar WebSocket, se crea un patrn de uso completamente nuevo para las
aplicaciones de servidor. Aunque las pilas de servidor tradicionales como LAMP
estn diseadas a partir del ciclo de solicitud-respuesta de HTTP, a menudo dan
problemas si hay muchas conexiones WebSocket abiertas. Mantener un gran
nmero de conexiones abiertas de forma simultnea requiere una arquitectura
capaz de recibir un alto nivel de concurrencia sin consumir mucho rendimiento.
Estas arquitecturas suelen estar basadas en subprocesos o el denominado
sistema E/S asncrono.
Implementaciones en el servidor
Node.js
Socket.IO
WebSocket-Node
ws
Java
Jetty
Ruby
EventMachine
Python
pywebsocket
Tornado
Erlang
Shirasu
C++
libwebsockets
.NET
SuperWebSocket
Versiones de protocolos
El protocolo de transmisin (un protocolo de enlace y la transferencia de datos
entre cliente y servidor) para WebSocket ahora es RFC6455. Las ltimas
versiones de Chrome y Chrome para Android son completamente compatibles
con RFC6455, incluidos los mensajes binarios. Adems, Firefox es compatible a
partir de la versin 11 e Internet Explorer a partir de la versin 10. Puedes seguir
utilizando versiones ms antiguas del protocolo, pero no es recomendable, ya
que se ha demostrado que son vulnerables. Si has implementado versiones
anteriores del protocolo WebSocket en servidores, te recomendamos que las
actualices a la ltima versin.
Casos prcticos
Utiliza WebSocket siempre que necesites una conexin casi a tiempo real y de
latencia baja entre el cliente y el servidor. Ten en cuenta que esto podra
significar tener que replantearte cmo has desarrollado tus aplicaciones de
servidor, adoptando un nuevo enfoque en tecnologas como las colas de
eventos. Estos son algunos ejemplos de casos prcticos:
Juegos online multijugadores
Aplicaciones de chat
Rotativos de informacin deportiva
Actualizaciones en tiempo real de las actividades de tus amigos
Demos
Plink
Paint With Me
Pixelatr
Dashed
Massively multiplayer online crossword
Ping server (utilizada en los ejemplos anteriores)
HTML5demos sample
Referencias
El API WebSocket
El protocolo WebSocket
WebSockets - MDN