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.1 | Sì (THttpCli, TSslHttpCli) | Sì, più backend |
| Server HTTP/1.1 | Sì (TSslHttpAppSrv) | Sì |
| Client WebSocket | Sì (dalla v8) | Sì, RFC 6455 completo |
| Server WebSocket | Sì (dalla v8) | Sì, sotto-protocolli, per-message deflate, canali |
| HTTP/2 | Limitato / non è una funzionalità di prima classe | Sì, layer HPACK + frame completo |
| HTTP/3 / QUIC | No | Sì (basato su msquic) |
| MQTT 3.1.1 / 5.0 | Nessun broker nativo, solo client base | Client + broker completi, entrambe le versioni |
| AMQP 1.0 / 0.9.1 | No | Sì |
| STOMP, SSE, WAMP | SSE base, gli altri no | Tutti supportati |
| WebRTC / STUN / TURN / DTLS-SRTP | No | Sì |
| CoAP, AWS IoT, Azure IoT | No | Sì |
| SMTP / POP3 / IMAP / FTP / NNTP | Sì, implementazioni mature | No (usa Indy o ICS) |
| Binding OpenSSL | Sì, molto aggiornati | Sì, più SChannel e BoringSSL |
| Oltre 30 wrapper REST API (OpenAI, Anthropic, AWS, Azure, exchange) | No | Sì |
| Licenza | Gratuita, in stile Mozilla | Commerciale, Free Edition disponibile |
| Versioni Delphi | Da D7 a D13 | Da D7 a D13 |
| Manutenzione | Attiva, guidata dal vendor (Magenta Systems) | Attiva, guidata dal vendor, rilasci mensili |
| Supporto commerciale | Contratti di supporto a pagamento opzionali | Incluso 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, NNTP | ICS |
| Piccolo HTTP fetcher single-form senza threading | ICS |
| Inseguire OpenSSL bleeding-edge | ICS (sgc è molto vicino) |
| Client/server WebSocket con canali, WatchDog, client JS | sgcWebSockets |
| Client o server HTTP/2, Apple Push, FCM | sgcWebSockets |
| HTTP/3 / QUIC | sgcWebSockets |
| Broker MQTT 5, AMQP 1.0, WAMP, STOMP | sgcWebSockets |
| WebRTC, STUN, TURN, IoT, CoAP | sgcWebSockets |
| Componenti pronti per API OpenAI / Anthropic / cloud | sgcWebSockets |
| Contratto di supporto commerciale vendor | Entrambi — 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.