sgcWebSockets vs ICS — networking Delphi a confronto

· Recensioni

L'altra libreria di networking Delphi di lungo corso

Per gli sviluppatori Delphi alla ricerca di una libreria di networking nel 2026, tendono a uscire tre nomi: Indy, Overbyte ICS (Internet Component Suite di François Piette) e sgcWebSockets. ICS è in giro da quasi quanto Indy e ha un seguito affezionato, specialmente tra gli sviluppatori che apprezzano la sua architettura non bloccante e basata sulla message pump. sgcWebSockets è la libreria commerciale più recente focalizzata sui protocolli moderni.

Questo articolo le confronta testa a testa: copertura delle funzionalità, supporto WebSocket, HTTP/2 e HTTP/3, licenza, esperienza dello sviluppatore e supporto commerciale. Dove il confronto dipende da una release specifica di ICS, le affermazioni si basano sulla serie v9 documentata pubblicamente al momento della scrittura — controlla il changelog ICS corrente se hai bisogno di una conferma esatta della funzionalità.

Origini e filosofia di design

ICS è nata negli anni '90 come un insieme di wrapper WinSock asincroni e event-driven. I componenti ICS classici (TWSocket, THttpCli, TSslHttpServer) usano un modello non bloccante basato sulla message pump: ogni operazione su socket invia un messaggio Windows e tu rispondi in un event handler. Quel modello si sposa magnificamente con la VCL Delphi — niente thread, niente primitive di sincronizzazione, gira sul main thread. ICS ha poi aggiunto un server HTTP con thread pool (TSslHttpAppSrv) per concorrenza più alta.

sgcWebSockets è stato progettato attorno a un problema diverso: connessioni bidirezionali di lunga durata (WebSocket, MQTT, SSE, stream in stile gRPC) e stack di trasporto moderni (HTTP/2, HTTP/3 su QUIC). Usa un server basato su IOCP su Windows per lo scaling e un modello client event-driven per messaging a bassa latenza. Incapsula anche Indy e ICS come backend HTTP alternativi, così puoi scegliere il trasporto che si adatta al tuo ambiente.

Confronto funzionalità per funzionalità

FunzionalitàOverbyte ICS (v9, al momento)sgcWebSockets
Client HTTP/1.1Sì (THttpCli, TSslHttpCli)Sì, più backend
Server HTTP/1.1Sì (TSslHttpAppSrv)
Client WebSocketSì (dalla v8)Sì, RFC 6455 completo
Server WebSocketSì (dalla v8)Sì, sotto-protocolli, per-message deflate, canali
HTTP/2Limitato / non è una funzionalità di prima classeSì, layer HPACK + frame completo
HTTP/3 / QUICNoSì (basato su msquic)
MQTT 3.1.1 / 5.0Nessun broker nativo, solo client baseClient + broker completi, entrambe le versioni
AMQP 1.0 / 0.9.1No
STOMP, SSE, WAMPSSE base, gli altri noTutti supportati
WebRTC / STUN / TURN / DTLS-SRTPNo
CoAP, AWS IoT, Azure IoTNo
SMTP / POP3 / IMAP / FTP / NNTPSì, implementazioni matureNo (usa Indy o ICS)
Binding OpenSSLSì, molto aggiornatiSì, più SChannel e BoringSSL
Oltre 30 wrapper REST API (OpenAI, Anthropic, AWS, Azure, exchange)No
LicenzaGratuita, in stile MozillaCommerciale, Free Edition disponibile
Versioni DelphiDa D7 a D13Da D7 a D13
ManutenzioneAttiva, guidata dal vendor (Magenta Systems)Attiva, guidata dal vendor, rilasci mensili
Supporto commercialeContratti di supporto a pagamento opzionaliIncluso con le edizioni a pagamento

Supporto WebSocket

ICS ha aggiunto componenti WebSocket nella v8 (TIcsWebSocketClient, lato server tramite TSslHttpAppSrv con handler WebSocket). Coprono RFC 6455 e TLS, che è sufficiente per molti casi d'uso. Quello che ICS non fornisce ancora out of the box è il per-message deflate per default, canali con nome / gruppi di broadcast, un WatchDog di auto-reconnect, glue JavaScript per il client, o protocolli integrati sopra WebSocket (WebSocket-MQTT, WebSocket-STOMP, WAMP).

sgcWebSockets tratta WebSocket come il centro dell'universo. Il server multiplexa HTTP e WebSocket sulla stessa porta, distribuisce canali e helper di broadcast, include un client JavaScript che rispecchia l'API Delphi e aggiunge auto-reconnect WatchDog, ping/pong di heartbeat, code di messaggi e un componente load balancer in stile LB. Se vivi e respiri WebSocket, l'esperienza dello sviluppatore è notevolmente più ricca.

HTTP/2 e HTTP/3

È l'area con il gap più grande. Al momento della scrittura, ICS non elenca HTTP/2 come funzionalità di prima classe nelle note di rilascio della v9 — qualche lavoro sperimentale è stato discusso sulla mailing list pubblica, ma il percorso raccomandato per HTTP/2 dentro un'applicazione ICS è usare una libreria separata.

sgcWebSockets ha distribuito un'implementazione HTTP/2 completa dal 2018, inclusi l'algoritmo di compressione header HPACK, il multiplexing dei frame, il server push e la negoziazione ALPN. Lo stesso flusso di codice è usato dal client Apple Push Notification, dal client Google FCM e da qualunque endpoint server HTTP/2 tu costruisca. HTTP/3 su QUIC è stato aggiunto nel 2023 usando la libreria msquic di Microsoft su Windows e ngtcp2 su Linux. Per applicazioni che hanno bisogno di supporto di trasporto bleeding-edge, questo è un differenziatore significativo.

Protocolli Internet classici

ICS vince nettamente qui. SMTP, POP3, IMAP, FTP, NNTP, DNS e persino un server proxy HTTP sono tutti inclusi e ben mantenuti. Se stai costruendo un client di posta, un front-end FTP o un relay SMTP, ICS è un punto di partenza più solido di sgcWebSockets (che non distribuisce quei protocolli affatto).

Una combinazione comune è usare ICS per il layer posta/FTP e sgcWebSockets per il layer WebSocket / HTTP/2 / MQTT nello stesso prodotto. Entrambe le librerie convivono felicemente perché hanno namespace di unit separati.

SSL / TLS

Entrambe le librerie prendono TLS sul serio. ICS è ben noto per inseguire le nuove release OpenSSL estremamente in fretta — le nuove versioni minor di OpenSSL 3.x sono di solito supportate entro pochi giorni. sgcWebSockets segue anch'esso OpenSSL e supporta inoltre Windows SChannel e BoringSSL, più il proprio layer di crittografia end-to-end per la confidenzialità a livello applicativo sopra TLS.

Esperienza dello sviluppatore

ICS usa un'API event-driven in stile message pump che è molto naturale dentro una form VCL — piazzi un componente, colleghi OnDataAvailable o OnRequestDone, e i messaggi Windows guidano il flusso. È leggera sui thread, facile da debuggare e idiomatica per lo sviluppo VCL classico. Lo svantaggio è che scalare oltre una singola message pump richiede o le varianti server con thread pool, o disegni multi-istanza espliciti.

sgcWebSockets segue la convenzione di componenti più recente usata da Indy e dalle moderne librerie REST: un componente con sotto-oggetti di opzioni fortemente tipizzati (HeartBeat, WatchDog, TLSOptions, ecc.), callback event-driven e worker thread sotto il cofano. Il trasporto server IOCP scala a decine di migliaia di connessioni concorrenti senza modifiche al codice utente.

Licenza e prezzi

ICS è gratuita sia per uso commerciale sia non commerciale sotto una licenza in stile Mozilla. Sono disponibili contratti di supporto commerciale opzionali da Magenta Systems. sgcWebSockets è commerciale, con una Free Edition per uso non commerciale e quattro edizioni a pagamento (Standard, Professional, Enterprise, All-Access). Le edizioni a pagamento includono codice sorgente, aggiornamenti mensili e supporto vendor diretto.

Matrice decisionale

Se hai bisogno di…Scelta migliore
Client SMTP, POP3, IMAP, FTP, NNTPICS
Piccolo HTTP fetcher single-form senza threadingICS
Inseguire OpenSSL bleeding-edgeICS (sgc è molto vicino)
Client/server WebSocket con canali, WatchDog, client JSsgcWebSockets
Client o server HTTP/2, Apple Push, FCMsgcWebSockets
HTTP/3 / QUICsgcWebSockets
Broker MQTT 5, AMQP 1.0, WAMP, STOMPsgcWebSockets
WebRTC, STUN, TURN, IoT, CoAPsgcWebSockets
Componenti pronti per API OpenAI / Anthropic / cloudsgcWebSockets
Contratto di supporto commerciale vendorEntrambi — sgcWebSockets incluso, ICS opzionale

Considerazioni finali

ICS e sgcWebSockets non sono in realtà tanto competitor quanto strumenti complementari. ICS è una libreria progettata splendidamente, gratuita, message-pump-friendly, che eccelle nei protocolli Internet classici e nell'HTTP leggero. sgcWebSockets è una libreria commerciale focalizzata che possiede lo stack web moderno — WebSocket, HTTP/2/3, MQTT, AMQP, WebRTC, IoT, API AI — e scala a grandi numeri di connessioni concorrenti. La risposta giusta per molti progetti reali è usare entrambi, scegliendo ciascuna libreria per i protocolli in cui fa meglio.