martes, 22 de diciembre de 2009

Web Sockets: El TCP de la Web

Desde la versión 4.0.249.0 de Google Chrome tenemos disponible los Web Sockets. Los Web Sockets son la siguiente generación en la tecnología de comunicación bidireccional para las aplicaciones web que está siendo estandarizada como parte del documento Web Applications 1.0.

Hasta hace poco, la comunicación para las aplicaciones web era implementada por los desarrolladores usando XMLHttpRequest. La comunicación bidireccional usando esta tecnología, forzaba al programador a crear una complejidad innecesaria en el lado del servidor. Web Sockets nos proporciona una comunicación bidireccional real con el navegador, solucionando este problema ya que, una vez establecida la conexión, podemos enviar datos desde el navegador al servidor llamando al método send(), y recibir datos desde el servidor implementando el evento onmessage.


if ("WebSocket" in window) {
var ws = new WebSocket("ws://example.com/service");
ws.onopen = function() {
// Web Socket is connected.
// You can send data by send()
// method.ws.send("message to send"); ....
};
ws.onmessage = function (evt) {
var received_msg = evt.data;
};
ws.onclose = function() {
// websocket is closed.
};
}
else
{
// the browser doesn't support WebSocket.
}


Como parte de los Web Sockets, también se ha desarrollado un nuevo protocolo "Web Sockets Protocol", que el navegador usará para comunicarse con los servidores.

En el código de ejemplo, verás una URI diferente usada para utilizar el nuevo protocolo.

ws://example.com/service

Y te preguntarás, para qué otro protocolo de comunicación si podemos usar los más que probados TCP o HTTP. Pues sencillo, el protocolo no puede ser TCP porque necesitamos mantener el mismo modelo de seguridad proporcionado en el origen. Tampoco puede ser HTTP porque el tráfico manejado difiere del modelo petición-respuesta de éste. Además, el uso del nuevo protocolo también debería de proporcionar un menor uso del ancho de banda, ya que no es necesario el envío de cabeceras una vez establecida la conexión inicial.

Para poder usar la nueva API, el protocolo, hacer uso de un modelo de programación más sencillo y obtener un tráfico de red más eficiente, necesitamos una nueva implementación del servidor. Google ha desarrollado una extensión para Apache, llamada pywebsocket, que puede ejecutarse como módulo o incluso como servidor.

Desde Google nos piden ayuda para que reportemos cualquier sugerencia, ya que tanto la API como el protocolo siguen en diseño y en discusión en la IETF.

1 comentario:

  1. Me parece una opción muy potente. Esperemos que el resto de navegadores también lo implementen pronto.

    ResponderEliminar