WebSocket

Protocolo WebSocket

WebSocket es un protocolo de comunicaciones (protocolo ws) dentro del protocolo HTTP que permite realizar conexiones cliente-servidor donde la comunicación se realiza mediante un canal bidireccional  y full-duplex. Es decir, WebSocket permite enviar y recibir datos a la vez,  a diferencia de Ajax, que solo permite enviar o recibir datos (half-duplex). Esto es realmente útil en comunicaciones en tiempo real como un videojuego online, una llamada telefónica o un chat donde es necesario mantener la conexión abierta durante cierto tiempo. Para crear una conexión ws es necesario crear una instancia WebSocket, la cual, inicia realizando una petición http y una vez revisados los datos permite iniciar la conexión websocket. mateniéndose abierta y preparada para enviar y recibir datos. 

CREAR CONEXIÓN WEBSOCKET

  1. var ws = new WebSocket("ws://example.com/socketserver");

EVENTOS

Existen distintos tipos de evento que pueden ser registrados durante la conexión.

onopen

Permite asegurarse de que existe al menos una conexión  WebSocket abierta.

onmessage

Permite realizar una acción cuando un mensaje es recibido

onerror

Permite manejar el error si se produce.

MÉTODOS

send

Permite enviar información.

close

Permite finalizar y cerrar la conexión

WebSocket puede manejar archivos  de texto plano, archivos json, archivos de tipo Blob y archivos binarios. Cabe destacar que este tipo de conexiones dispone de una versión segura (WebSobket Security), así, de la misma forma que  http, dispone de su versión segura https, ws dispone de la versión wss. A continuación un ejemplo básico de un chat mediante el protocolo WebSocket manejando un objeto json, basado en websocket.org.

index.html

  1. <!DOCTYPE html>
  2. <html lang="es">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Websocket</title>
  7. </head>
  8. <body>
  9. <button id="btnConnect">Conectar</button>
  10. <button id="btnDisconnect">Desconectar</button>
  11. <label for="txtName">Nombre</label>
  12. <input type="text" id="txtName">
  13. <label for="txtMsg">Mensaje</label>
  14. <input type="text" id="txtMsg">
  15. <button id="btnSend">Enviar</button>
  16. <label for="chat">Chat</label>
  17. <div id="chat"></div>
  18. <script src="script.js"></script>
  19. </body>
  20. </html>

ws.js

  1. let ws = null;
  2. const setText = data => {
  3. const msg = `<div>${data}div>`;
  4. chat.insertAdjacentHTML("beforeend",msg);
  5. }
  6. const setMessage = data => {
  7. const msg = `<div><span>${data.name}</span>:${data.message}span>div>`;
  8. chat.insertAdjacentHTML("beforeend",msg);
  9. }
  10. btnConnect.addEventListener("click", evt => {
  11. ws = new WebSocket("ws://demos.kaazing.com/echo");
  12. ws.onopen = () => setText("Conectado");
  13. ws.onclose = () => setText("Desconectado");
  14. ws.onerror = () => setText(e);
  15. ws.onmessage = e => {
  16. const msg = JSON.parse(e.data);
  17. setMessage(msg);
  18. }
  19. })
  20. btnDisconnect.addEventListener("click", evt => {
  21. ws.close();
  22. })
  23. btnSend.addEventListener("click", evt => {
  24. const msg = {
  25. name: txtName.value,
  26. message: txtMsg.value
  27. }
  28. ws.send(JSON.stringify(msg));
  29. })

fuente: Alexys Lozada de EDteam

Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso