¿Qué son los WebSockets?

WebSocket es una tecnología web que ofrece canales de comunicación bidireccional y full-duplex sobre un único socket TCP, estandarizada por el IETF como RFC 6455.

Comunicación en tiempo real

WebSocket permite una comunicación persistente y bidireccional entre navegadores y servidores sin necesidad de polling constante.

Más allá de petición-respuesta HTTP

El HTTP tradicional sigue un patrón de petición-respuesta en el que el cliente debe iniciar cada intercambio. WebSocket actualiza una conexión HTTP a un canal persistente y full-duplex en el que tanto cliente como servidor pueden enviar datos en cualquier momento. Esto elimina la sobrecarga de los repetidos handshakes HTTP y permite interacciones en tiempo real reales, como feeds en directo, juegos en línea, edición colaborativa y tickers financieros.

  • Bidireccional: tanto cliente como servidor pueden enviar datos
  • La conexión persistente reduce la latencia y la sobrecarga
  • Funciona sobre los puertos TCP estándar 80/443 y atraviesa firewalls
  • Estandarizada como RFC 6455 por el IETF
CLIENTE SERVIDOR Full-duplex ws:// or wss:// RFC 6455

El handshake de WebSocket

Una conexión WebSocket empieza como una petición HTTP de upgrade y luego pasa a un protocolo persistente de tramas binarias.

1. Petición HTTP de upgrade

El cliente envía una petición HTTP GET con las cabeceras Upgrade: websocket y Connection: Upgrade, junto con un Sec-WebSocket-Key aleatorio.

2. El servidor acepta

El servidor responde con HTTP 101 Switching Protocols, confirmando el upgrade. La conexión TCP es ahora un canal WebSocket.

3. Mensajería full-duplex

Ambos lados envían libremente tramas de texto o binarias con una sobrecarga mínima de 2 bytes. La conexión permanece abierta hasta que cualquiera de los lados la cierre.

Ejemplo de WebSocket en Delphi

Conéctate a un servidor WebSocket e intercambia mensajes en unas pocas líneas de código.

uses
  sgcWebSocket_Client, sgcWebSocket_Types;

var
  WSClient: TsgcWebSocketClient;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'echo.websocket.org';
  WSClient.Port := 443;
  WSClient.TLS := True;
  WSClient.OnMessage := OnMessage;
  WSClient.Active := True;
end;

procedure TForm1.OnMessage(Connection: TsgcWSConnection;
  const aText: string);
begin
  // Gestiona los mensajes entrantes
  Memo1.Lines.Add('Received: ' + aText);
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
begin
  // Envía un mensaje de texto al servidor
  WSClient.WriteData('Hello, WebSocket!');
end;

¿Listo para construir aplicaciones en tiempo real?

Descarga sgcWebSockets y añade soporte de WebSocket a tus proyectos de Delphi, C++ Builder o .NET hoy mismo.