sgcWebSockets vs ICS — Delphi-netwerken vergeleken

· Reviews

De andere al lang bestaande Delphi-netwerkbibliotheek

Voor Delphi-ontwikkelaars die in 2026 een netwerkbibliotheek zoeken, komen er meestal drie namen voorbij: Indy, Overbyte ICS (Internet Component Suite door François Piette), en sgcWebSockets. ICS bestaat bijna net zo lang als Indy en heeft een toegewijde aanhang, vooral onder ontwikkelaars die de non-blocking, message-pump-gebaseerde architectuur waarderen. sgcWebSockets is de nieuwere commerciele bibliotheek gericht op moderne protocollen.

Dit artikel vergelijkt de twee head-to-head: featuredekking, WebSocket-ondersteuning, HTTP/2 en HTTP/3, licentie, developer experience, en commerciele ondersteuning. Waar de vergelijking afhangt van een specifieke ICS-release, zijn de claims gebaseerd op de publiek gedocumenteerde v9-serie op het moment van schrijven — raadpleeg de huidige ICS-changelog als je een exacte feature-bevestiging nodig hebt.

Oorsprong en ontwerpfilosofie

ICS begon in de jaren negentig als een set asynchrone, event-gedreven WinSock-wrappers. De klassieke ICS-componenten (TWSocket, THttpCli, TSslHttpServer) gebruiken een non-blocking message-pump-model: elke socket-operatie post een Windows-bericht en je reageert in een event handler. Dat model past prachtig bij de Delphi VCL — geen threads, geen synchronisatieprimitieven, draait op de main thread. ICS voegde later een thread-pooled HTTP-server toe (TSslHttpAppSrv) voor hogere concurrency.

sgcWebSockets is ontworpen rond een ander probleem: langlevende bidirectionele verbindingen (WebSocket, MQTT, SSE, gRPC-stijl streams) en moderne transportstacks (HTTP/2, HTTP/3 over QUIC). Het gebruikt een IOCP-gebaseerde server op Windows voor schaling en een event-gedreven clientmodel voor messaging met lage latentie. Het wrapt ook Indy en ICS als alternatieve HTTP-backends, zodat je het transport kunt kiezen dat bij je omgeving past.

Feature-vergelijking

FeatureOverbyte ICS (v9, op moment van schrijven)sgcWebSockets
HTTP/1.1-clientJa (THttpCli, TSslHttpCli)Ja, meerdere backends
HTTP/1.1-serverJa (TSslHttpAppSrv)Ja
WebSocket-clientJa (sinds v8)Ja, volledige RFC 6455
WebSocket-serverJa (sinds v8)Ja, subprotocollen, per-message deflate, kanalen
HTTP/2Beperkt / geen first-class featureJa, volledige HPACK + frame-laag
HTTP/3 / QUICNeeJa (msquic-gebaseerd)
MQTT 3.1.1 / 5.0Geen native broker, alleen basisclientVolledige client + broker, beide versies
AMQP 1.0 / 0.9.1NeeJa
STOMP, SSE, WAMPSSE basis, andere neeAlle ondersteund
WebRTC / STUN / TURN / DTLS-SRTPNeeJa
CoAP, AWS IoT, Azure IoTNeeJa
SMTP / POP3 / IMAP / FTP / NNTPJa, volwassen implementatiesNee (gebruik Indy of ICS)
OpenSSL-bindingenJa, zeer actueelJa, plus SChannel en BoringSSL
30+ REST API-wrappers (OpenAI, Anthropic, AWS, Azure, exchanges)NeeJa
LicentieGratis, Mozilla-stijlCommercieel, Free Edition beschikbaar
Delphi-versiesD7 t/m D13D7 t/m D13
OnderhoudActief, leverancier-gedreven (Magenta Systems)Actief, leverancier-gedreven, maandelijkse releases
Commerciele ondersteuningOptionele betaalde supportcontractenInbegrepen bij betaalde edities

WebSocket-ondersteuning

ICS voegde WebSocket-componenten toe in v8 (TIcsWebSocketClient, server-side via TSslHttpAppSrv met WebSocket-handlers). Ze dekken RFC 6455 en TLS, wat voor veel use cases voldoende is. Wat ICS nog niet out-of-the-box biedt is per-message deflate by default, named channels / broadcast groups, een auto-reconnect WatchDog, JavaScript client glue, of ingebouwde protocollen bovenop WebSocket (WebSocket-MQTT, WebSocket-STOMP, WAMP).

sgcWebSockets behandelt WebSocket als het middelpunt van het universum. De server multiplexed HTTP en WebSocket op dezelfde poort, levert kanalen en broadcast-helpers, bevat een JavaScript-client die de Delphi-API weerspiegelt, en voegt WatchDog auto-reconnect, heartbeat ping/pong, berichtwachtrijen en een LB-style load balancer-component toe. Als je leeft en ademt op WebSocket, is de developer experience merkbaar rijker.

HTTP/2 en HTTP/3

Dit is het gebied met de grootste kloof. Op moment van schrijven noemt ICS HTTP/2 niet als first-class feature in de v9-releasenotes — wat experimenteel werk is besproken op de openbare mailing list, maar het aanbevolen pad voor HTTP/2 binnen een ICS-toepassing is een aparte bibliotheek gebruiken.

sgcWebSockets levert sinds 2018 een volledige HTTP/2-implementatie, inclusief het HPACK header compression-algoritme, frame-multiplexing, server push en ALPN-onderhandeling. Datzelfde code-pad wordt gebruikt door de Apple Push Notification-client, de Google FCM-client en elk HTTP/2-server-endpoint dat je bouwt. HTTP/3 over QUIC werd toegevoegd in 2023 met Microsoft’s msquic-bibliotheek op Windows en ngtcp2 op Linux. Voor toepassingen die bleeding-edge transportondersteuning nodig hebben, is dit een betekenisvolle differentiator.

Klassieke internetprotocollen

ICS wint hier duidelijk. SMTP, POP3, IMAP, FTP, NNTP, DNS en zelfs een HTTP-proxyserver zijn allemaal inbegrepen en goed onderhouden. Als je een e-mailclient, een FTP-front-end of een SMTP-relay bouwt, is ICS een sterker startpunt dan sgcWebSockets (dat die protocollen helemaal niet meelevert).

Een veelvoorkomende combinatie is ICS gebruiken voor de mail/FTP-laag en sgcWebSockets voor de WebSocket / HTTP/2 / MQTT-laag in hetzelfde product. Beide bibliotheken coexisteren prima omdat ze gescheiden unit-namespaces hebben.

SSL / TLS

Beide bibliotheken nemen TLS serieus. ICS staat erom bekend zeer snel nieuwe OpenSSL-releases bij te houden — nieuwe OpenSSL 3.x minor versies worden meestal binnen dagen ondersteund. sgcWebSockets volgt ook OpenSSL en ondersteunt daarnaast Windows SChannel en BoringSSL, plus een eigen end-to-end encryption-laag voor vertrouwelijkheid op applicatieniveau bovenop TLS.

Developer experience

ICS gebruikt een event-gedreven, message-pump-stijl API die zeer natuurlijk is binnen een VCL-formulier — je dropt een component, hangt OnDataAvailable of OnRequestDone aan, en Windows-berichten sturen de flow. Het is licht op threads, makkelijk te debuggen, en idiomatisch voor klassieke VCL-ontwikkeling. Het nadeel is dat opschalen voorbij een enkele message pump ofwel de thread-pooled servervarianten of expliciete multi-instance-ontwerpen vereist.

sgcWebSockets volgt de recentere componentconventie zoals gebruikt door Indy en moderne REST-bibliotheken: een component met sterk getypeerde options-subobjecten (HeartBeat, WatchDog, TLSOptions, etc.), event-gedreven callbacks en worker threads onder de motorkap. Het IOCP-server-transport schaalt naar tientallen duizenden gelijktijdige verbindingen zonder wijzigingen in user code.

Licentie en prijzen

ICS is gratis voor zowel commercieel als niet-commercieel gebruik onder een Mozilla-stijl licentie. Optionele commerciele supportcontracten zijn beschikbaar bij Magenta Systems. sgcWebSockets is commercieel, met een Free Edition voor niet-commercieel gebruik en vier betaalde edities (Standard, Professional, Enterprise, All-Access). Betaalde edities omvatten broncode, maandelijkse updates en directe leveranciersondersteuning.

Beslissingsmatrix

Als je nodig hebt…Beste keuze
SMTP-, POP3-, IMAP-, FTP-, NNTP-clientsICS
Kleine single-form HTTP-fetcher zonder threadingICS
Bleeding-edge OpenSSL-trackingICS (sgc zit er dicht bij)
WebSocket-client/server met kanalen, WatchDog, JS-clientsgcWebSockets
HTTP/2-client of server, Apple Push, FCMsgcWebSockets
HTTP/3 / QUICsgcWebSockets
MQTT 5-broker, AMQP 1.0, WAMP, STOMPsgcWebSockets
WebRTC, STUN, TURN, IoT, CoAPsgcWebSockets
Kant-en-klare OpenAI- / Anthropic- / cloud-API-componentensgcWebSockets
Commercieel leveranciers-supportcontractBeide — sgcWebSockets gebundeld, ICS optioneel

Afsluitende gedachten

ICS en sgcWebSockets zijn niet echt concurrenten maar eerder complementaire tools. ICS is een prachtig ontworpen, gratis, message-pump-vriendelijke bibliotheek die uitblinkt in klassieke internetprotocollen en lichtgewicht HTTP. sgcWebSockets is een gerichte commerciele bibliotheek die de moderne webstack — WebSocket, HTTP/2/3, MQTT, AMQP, WebRTC, IoT, AI-API’s — bezit en schaalt naar grote aantallen gelijktijdige verbindingen. Het juiste antwoord voor veel echte projecten is beide te gebruiken, waarbij je elke bibliotheek kiest voor de protocollen die zij het beste doet.