Componente WebSocket Delphi — client e server di livello produzione

Un'implementazione WebSocket nativa, conforme a RFC 6455, per Delphi e C++Builder. Costruisci client e server che mantengono migliaia di connessioni concorrenti, girano su Windows, macOS, Linux, iOS e Android, e sopravvivono a reti instabili grazie alla riconnessione automatica integrata WatchDog.

Cos'è un componente WebSocket Delphi?

Un componente drop-in VCL/FMX che trasforma il protocollo WebSocket in un'API di proprietà ed eventi familiare agli sviluppatori Delphi nativi.

Un componente WebSocket Delphi è un componente non visuale che metti su una form (o istanzi a runtime) per aprire un canale TCP full-duplex tra un'applicazione Delphi e qualunque peer WebSocket RFC 6455 — un browser, un servizio Node.js, un reverse proxy nginx, un broker Mosquitto, un endpoint OpenAI Realtime o un altro processo Delphi. A differenza del polling HTTP, un WebSocket mantiene la connessione aperta: il server può fare push dei dati nel momento in cui sono disponibili, con latenza dell'ordine dei millisecondi e senza l'overhead HTTP per ogni messaggio.

sgcWebSockets è la libreria WebSocket di riferimento nell'ecosistema Delphi dal 2013. Gli stessi componenti TsgcWebSocketClient e TsgcWebSocketHTTPServer girano invariati da Delphi 7 fino a Delphi 13, su Win32, Win64, Linux64, macOS, iOS e Android, e su C++Builder dal C2007 al C13. Non c'è alcun runtime managed, nessun layer di interop .NET, nessun bridge JavaScript — è una pura implementazione Pascal che si compila nel tuo binario.

Classe del componente

TsgcWebSocketClient / TsgcWebSocketHTTPServer

Standard

RFC 6455, RFC 7692 (permessage-deflate)

Piattaforme

Windows, macOS, Linux, iOS, Android

Versioni Delphi

Delphi 7 → Delphi 13 + C++Builder

Perché scegliere sgcWebSockets invece di scriverselo

Scrivere un handler PING/PONG è facile. Sopravvivere a un reverse proxy che termina TLS, a un modulo WebSocket di IIS, a un firewall aziendale, a un handover cellulare mobile e a un test di carico con 5.000 client non lo è.

Un'unica API, ogni trasporto

WebSocket in chiaro (ws://), WebSocket TLS (wss://), WebSocket su HTTP/2, WebSocket su QUIC/HTTP/3, fallback su TCP raw — stesso componente, stessi eventi. Cambi trasporto modificando una sola proprietà.

Riconnessione automatica WatchDog

Abilita WatchDog e il client si riconnetterà con back-off esponenziale, si riautenticherà, si risottoscriverà ai topic MQTT e rigiocherà le pubblicazioni in coda — il pattern canonico mobile / IoT, già scritto.

Il threading è risolto

Il server usa internamente un reactor IOCP / kqueue / epoll. Tu scrivi gli handler degli eventi; la libreria li scheduli su un thread pool con serializzazione per connessione.

permessage-deflate

Negoziato automaticamente per RFC 7692. Riduce i payload JSON del 70–90 % ed è supportato da ogni browser moderno e load balancer.

Sotto-protocolli inclusi

MQTT 3.1.1/5.0, AMQP 0.9.1/1.0, STOMP, WAMP e Server-Sent Events viaggiano sopra lo stesso trasporto WebSocket — un solo socket TCP, più protocolli applicativi.

Anche un server HTTP

TsgcWebSocketHTTPServer serve file statici, endpoint REST, risorse protette da JWT e OAuth2, response compresse con gzip e l'upgrade a HTTP/2 nello stesso processo del tuo endpoint WebSocket.

TLS che funziona davvero

OpenSSL (cross-platform), SChannel (TLS kernel Windows) o HTTP.sys. Certificati client, SNI, ALPN, TLS 1.3 con 0-RTT.

Canali e broadcast

I Channels lato server raggruppano le connessioni per nome. Broadcast, BroadcastByChannel e BroadcastByUser distribuiscono a migliaia di peer in una sola chiamata.

Battle-tested

In produzione in banche, exchange, flotte IoT e società di trading dal 2013. Aggiornato ogni mese; history.txt traccia ogni fix.

Checklist delle funzionalità

Tutto ciò che dice l'RFC, più l'hardening operativo di cui hanno bisogno i deployment reali.

CapacitàClientServer
Framing RFC 6455 (text, binary, ping, pong, close)
permessage-deflate (RFC 7692)
Frame frammentati e di continuazione
Messaggi client mascheratin/a
TLS 1.2 / 1.3 (OpenSSL + SChannel)
Certificati client / mTLS
Autenticazione JWT e OAuth2
HTTP/2 + WebSocket (RFC 8441)
HTTP/3 + WebSocket su QUIC (RFC 9220)
Riconnessione automatica WatchDogn/a
Heartbeat (PING/PONG)
Canali e broadcastn/a
Sotto-protocolli (MQTT / AMQP / STOMP / WAMP / SSE)
Hosting HTTP.sys (kernel Windows)n/a
Modalità demone Linux

Hello WebSocket — client Delphi in 12 righe

Metti un TsgcWebSocketClient sulla form, imposta Host / Port, gestisci OnMessage, imposta 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;

Il lato server è simmetrico — metti un TsgcWebSocketHTTPServer, imposta Port, gestisci OnConnect e OnMessage, chiama Broadcast per distribuire a ogni peer connesso.

Versioni Delphi e C++Builder supportate

Un solo albero sorgente, 22 package runtime — che coprono ogni release Delphi ancora in uso commerciale attivo.

EdizioneVersioni
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 (tramite la base sgcIndy)
PiattaformeWin32, Win64, Linux64, macOS Intel/ARM, iOS device + simulator, Android ARM/ARM64

Continua a esplorare

Il trasporto WebSocket è la base di ogni altro protocollo della libreria.

Cosa sono i WebSocket?

Approfondimento sul protocollo RFC 6455, l'handshake, il framing e i casi d'uso.

Sotto-protocollo MQTT

Esegui MQTT 3.1.1 / 5.0 sulla stessa connessione WebSocket.

Client e server HTTP/2

HTTP/2 multiplexato con server push e WebSocket-su-HTTP/2.

Scelta del protocollo real-time

WebSocket vs SSE vs push HTTP/2 vs MQTT vs WebRTC — matrice decisionale.

Blog: canali, gruppi e utenti

Guida ai pattern per il broadcast a sottoinsiemi di connessioni.

Blog: WatchDog e BeforeConnect

Come funziona internamente il ciclo di vita di riconnessione automatica.

Blog: compressione più veloce

Tuning di permessage-deflate per il throughput contro la CPU.

Domande frequenti

Quali versioni di Delphi sono supportate?

Ogni release commerciale di Delphi da Delphi 7 (2002) fino a Delphi 13 (2025), più le corrispondenti versioni di C++Builder. Distribuiamo 22 package runtime separati — uno per IDE — da un singolo albero sorgente. Non c'è una SKU “legacy” separata; ogni cliente riceve ogni versione.

Il componente WebSocket supporta TLS / wss://?

Sì. Imposta URL := 'wss://...' e scegli un provider TLS: OpenSSL (cross-platform, incluso nella trial), SChannel (TLS kernel Windows, nessuna DLL da deployare), o HTTP.sys (lato server, certificato memorizzato nel Windows certificate store). Certificati client, SNI, ALPN, TLS 1.3 e 0-RTT sono tutti supportati.

Quante connessioni concorrenti può gestire il server?

Su Windows il server usa IOCP e raggiunge abitualmente 50.000+ connessioni concorrenti per processo su hardware commodity. Su Linux il reactor epoll scala in modo simile. Il limite duro è di livello OS (file descriptor, range di porte ephemeral, memoria kernel), non della libreria.

Qual è il modello di licenza?

Licenza perpetua per sviluppatore royalty-free con un anno di aggiornamenti incluso. Sono disponibili licenze single-developer, team e site — vedi prezzi. Il codice sorgente è incluso con ogni edizione commerciale.

Pronto ad aggiungere i WebSocket alla tua app Delphi?

Scarica la trial completamente funzionale di 30 giorni — client, server, tutti i sotto-protocolli, tutte le versioni Delphi.