Componente WebSocket para Delphi — Cliente y servidor de nivel producción

Implementación WebSocket nativa según RFC 6455 para Delphi y C++Builder. Construye clientes y servidores que mantengan miles de conexiones concurrentes, funcionen en Windows, macOS, Linux, iOS y Android, y sobrevivan a redes inestables gracias a la reconexión automática WatchDog integrada.

¿Qué es un componente WebSocket para Delphi?

Un componente VCL/FMX drop-in que convierte el protocolo WebSocket en una API de propiedades y eventos que cualquier desarrollador Delphi reconoce de inmediato.

Un componente WebSocket para Delphi es un componente no visual que arrastras a un form (o instancias en tiempo de ejecución) para abrir un canal TCP full-duplex entre una aplicación Delphi y cualquier par WebSocket RFC 6455 — un navegador, un servicio Node.js, un proxy inverso nginx, un broker Mosquitto, un endpoint Realtime de OpenAI u otro proceso Delphi. A diferencia del polling HTTP, un WebSocket mantiene la conexión abierta: el servidor puede empujar datos en cuanto están disponibles, con latencia de milisegundos y sin sobrecoste HTTP por mensaje.

sgcWebSockets ha sido la librería WebSocket de referencia en el ecosistema Delphi desde 2013. Los mismos componentes TsgcWebSocketClient y TsgcWebSocketHTTPServer funcionan sin modificaciones desde Delphi 7 hasta Delphi 13, en Win32, Win64, Linux64, macOS, iOS y Android, y en C++Builder C2007 hasta C13. No hay runtime gestionado, ni capa de interop .NET, ni puente JavaScript — es una implementación Pascal pura que se compila dentro de tu binario.

Clase de componente

TsgcWebSocketClient / TsgcWebSocketHTTPServer

Estándares

RFC 6455, RFC 7692 (permessage-deflate)

Plataformas

Windows, macOS, Linux, iOS, Android

Versiones de Delphi

Delphi 7 → Delphi 13 + C++Builder

Por qué elegir sgcWebSockets en lugar de implementarlo tú

Escribir un manejador PING/PONG es fácil. Sobrevivir a un proxy inverso que termina TLS, a un módulo WebSocket de IIS, a un firewall corporativo, a un handover móvil entre celdas y a una prueba de carga con 5.000 clientes, no lo es.

Una sola API, todos los transportes

WebSocket plano (ws://), WebSocket TLS (wss://), WebSocket sobre HTTP/2, WebSocket sobre QUIC/HTTP/3, fallback TCP en crudo — mismo componente, mismos eventos. Cambia de transporte modificando una propiedad.

Reconexión automática WatchDog

Activa WatchDog y el cliente reconectará con back-off exponencial, se reautenticará, se resuscribirá a los topics MQTT y reproducirá las publicaciones en cola — el patrón canónico móvil / IoT, ya escrito.

El threading está resuelto

El servidor usa un reactor IOCP / kqueue / epoll por debajo. Tú escribes manejadores de eventos; la librería los planifica sobre un pool de hilos con serialización por conexión.

permessage-deflate

Negociado automáticamente según RFC 7692. Recorta los payloads JSON entre un 70 y un 90 % y está soportado por todos los navegadores modernos y balanceadores.

Sub-protocolos incluidos

MQTT 3.1.1/5.0, AMQP 0.9.1/1.0, STOMP, WAMP y Server-Sent Events viajan sobre el mismo transporte WebSocket — un único socket TCP, múltiples protocolos de aplicación.

También servidor HTTP

TsgcWebSocketHTTPServer sirve archivos estáticos, endpoints REST, recursos protegidos por JWT y OAuth2, respuestas comprimidas con gzip y upgrade HTTP/2 en el mismo proceso que tu endpoint WebSocket.

TLS que realmente funciona

OpenSSL (multiplataforma), SChannel (TLS del kernel de Windows) o HTTP.sys. Certificados cliente, SNI, ALPN, TLS 1.3 con 0-RTT.

Canales y broadcast

Los Channels del servidor agrupan conexiones por nombre. Broadcast, BroadcastByChannel y BroadcastByUser reparten a miles de pares en una sola llamada.

Probado en batalla

En producción en bancos, exchanges, flotas IoT y firmas de trading desde 2013. Actualizado cada mes; history.txt registra cada corrección.

Checklist de funcionalidad

Todo lo que dice la RFC, más el endurecimiento operativo que los despliegues reales necesitan.

CapacidadClienteServidor
Framing RFC 6455 (texto, binario, ping, pong, close)
permessage-deflate (RFC 7692)
Frames fragmentados y de continuación
Mensajes de cliente enmascaradosn/d
TLS 1.2 / 1.3 (OpenSSL + SChannel)
Certificados cliente / mTLS
Autenticación JWT y OAuth2
HTTP/2 + WebSocket (RFC 8441)
HTTP/3 + WebSocket sobre QUIC (RFC 9220)
Reconexión automática WatchDogn/d
Heart-beat (PING/PONG)
Canales y broadcastn/d
Sub-protocolos (MQTT / AMQP / STOMP / WAMP / SSE)
Hosting HTTP.sys (kernel de Windows)n/d
Modo daemon en Linux

Hello WebSocket — cliente Delphi en 12 líneas

Arrastra un TsgcWebSocketClient al form, fija Host / Port, maneja OnMessage, establece Active := True.

uses
  sgcWebSocket, sgcWebSocket_Classes;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WS := TsgcWebSocketClient.Create(nil);
  WS.URL := 'wss://echo.websocket.events';
  WS.WatchDog.Enabled := True;
  WS.WatchDog.Interval := 5;
  WS.OnConnect := WSConnect;
  WS.OnMessage := WSMessage;
  WS.OnDisconnect := WSDisconnect;
  WS.Active := True;
end;

procedure TForm1.WSMessage(Connection: TsgcWSConnection; const Text: string);
begin
  Memo1.Lines.Add('<< ' + Text);
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
begin
  WS.WriteData('{"hello":"world"}');
end;

El lado servidor es simétrico — arrastra un TsgcWebSocketHTTPServer, fija Port, maneja OnConnect y OnMessage, llama a Broadcast para repartir a cada par conectado.

Versiones soportadas de Delphi y C++Builder

Un único árbol de fuentes, 22 paquetes runtime — cubre cada release de Delphi en uso comercial activo.

EdiciónVersiones
Delphi / RAD Studio7, 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney, 11 Alexandria, 12 Athens, 13
C++Builder2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10, 10.1, 10.2, 10.3, 10.4, 11, 12, 13
FreePascal / Lazarus3.x (vía la base sgcIndy)
PlataformasWin32, Win64, Linux64, macOS Intel/ARM, iOS dispositivo + simulador, Android ARM/ARM64

Sigue explorando

El transporte WebSocket es la base de todos los demás protocolos de la librería.

¿Qué son los WebSockets?

Contexto sobre el protocolo RFC 6455, el handshake, el framing y los casos de uso.

Sub-protocolo MQTT

Ejecuta MQTT 3.1.1 / 5.0 sobre la misma conexión WebSocket.

Cliente y servidor HTTP/2

HTTP/2 multiplexado con server push y WebSocket-sobre-HTTP/2.

Selector de protocolo en tiempo real

WebSocket vs SSE vs HTTP/2 push vs MQTT vs WebRTC — matriz de decisión.

Blog: canales, grupos y usuarios

Guía de patrones para emitir broadcast a subconjuntos de conexiones.

Blog: WatchDog y BeforeConnect

Cómo funciona por dentro el ciclo de vida de la reconexión automática.

Blog: compresión más rápida

Cómo ajustar permessage-deflate para throughput frente a CPU.

Preguntas frecuentes

¿Qué versiones de Delphi están soportadas?

Todas las versiones comerciales de Delphi desde Delphi 7 (2002) hasta Delphi 13 (2025), más las versiones correspondientes de C++Builder. Distribuimos 22 paquetes runtime separados — uno por IDE — desde un único árbol de fuentes. No existe un SKU “legacy” separado; cada cliente recibe todas las versiones.

¿El componente WebSocket admite TLS / wss://?

Sí. Establece URL := 'wss://...' y elige un proveedor TLS: OpenSSL (multiplataforma, viene con la versión de prueba), SChannel (TLS del kernel de Windows, sin DLLs que desplegar) o HTTP.sys (lado servidor, certificado almacenado en el almacén de certificados de Windows). Certificados cliente, SNI, ALPN, TLS 1.3 y 0-RTT están todos soportados.

¿Cuántas conexiones concurrentes puede manejar el servidor?

En Windows el servidor usa IOCP y escala rutinariamente a más de 50.000 conexiones concurrentes por proceso en hardware estándar. En Linux el reactor epoll escala de forma similar. El límite duro es del SO (descriptores de archivo, rango de puertos efímeros, memoria del kernel), no de la librería.

¿Cuál es el modelo de licencia?

Licencia perpetua por desarrollador libre de royalties con un año de actualizaciones incluido. Disponibles licencias single-developer, team y site — consulta precios. El código fuente se incluye con cada edición comercial.

¿Listo para añadir WebSockets a tu app Delphi?

Descarga la versión de prueba de 30 días totalmente funcional — cliente, servidor, todos los sub-protocolos, todas las versiones de Delphi.