sgcWebSockets vs ICS — Porównanie sieciowe Delphi

· Recenzje

Druga wieloletnia biblioteka sieciowa Delphi

Dla deweloperów Delphi szukających biblioteki sieciowej w 2026 roku, zwykle pojawiają się trzy nazwy: Indy, Overbyte ICS (Internet Component Suite autorstwa François Piette) oraz sgcWebSockets. ICS istnieje prawie tak długo jak Indy i ma oddanych zwolenników, zwłaszcza wśród deweloperów doceniających jego nieblokującą architekturę opartą na pompie komunikatów. sgcWebSockets to nowsza biblioteka komercyjna skoncentrowana na nowoczesnych protokołach.

Ten artykuł porównuje obie biblioteki bezpośrednio: pokrycie funkcji, obsługa WebSocket, HTTP/2 i HTTP/3, licencja, doświadczenie dewelopera i wsparcie komercyjne. Tam, gdzie porównanie zależy od konkretnego wydania ICS, twierdzenia bazują na publicznie udokumentowanej serii v9 na dzień pisania — sprawdź aktualny changelog ICS, jeśli potrzebujesz dokładnego potwierdzenia funkcji.

Pochodzenie i filozofia projektowa

ICS narodziło się w latach 90. jako zestaw asynchronicznych, zdarzeniowych owijek WinSock. Klasyczne komponenty ICS (TWSocket, THttpCli, TSslHttpServer) używają nieblokującego modelu opartego na pompie komunikatów: każda operacja gniazda wysyła komunikat Windows, a Ty reagujesz w obsłudze zdarzenia. Ten model pasuje do Delphi VCL pięknie — bez wątków, bez prymitywów synchronizacji, działa na głównym wątku. ICS dodał później pulę wątków serwera HTTP (TSslHttpAppSrv) dla wyższej współbieżności.

sgcWebSockets zostało zaprojektowane wokół innego problemu: długotrwałe połączenia dwukierunkowe (WebSocket, MQTT, SSE, strumienie w stylu gRPC) i nowoczesne stosy transportowe (HTTP/2, HTTP/3 nad QUIC). Używa serwera opartego na IOCP w Windows do skalowania i zdarzeniowego modelu klienta dla komunikatów o niskim opóźnieniu. Owija również Indy i ICS jako alternatywne backendy HTTP, więc możesz wybrać transport pasujący do Twojego środowiska.

Porównanie funkcja po funkcji

FunkcjaOverbyte ICS (v9, na dzień pisania)sgcWebSockets
Klient HTTP/1.1Tak (THttpCli, TSslHttpCli)Tak, wiele backendów
Serwer HTTP/1.1Tak (TSslHttpAppSrv)Tak
Klient WebSocketTak (od v8)Tak, pełne RFC 6455
Serwer WebSocketTak (od v8)Tak, podprotokoły, per-message deflate, kanały
HTTP/2Ograniczone / niefunkcja pierwszej klasyTak, pełna warstwa HPACK + ramek
HTTP/3 / QUICNieTak (oparte na msquic)
MQTT 3.1.1 / 5.0Brak natywnego brokera, tylko podstawowy klientPełny klient + broker, obie wersje
AMQP 1.0 / 0.9.1NieTak
STOMP, SSE, WAMPSSE podstawowe, inne nieWszystkie obsługiwane
WebRTC / STUN / TURN / DTLS-SRTPNieTak
CoAP, AWS IoT, Azure IoTNieTak
SMTP / POP3 / IMAP / FTP / NNTPTak, dojrzałe implementacjeNie (użyj Indy lub ICS)
Powiązania OpenSSLTak, bardzo aktualneTak, plus SChannel i BoringSSL
Ponad 30 owijek REST API (OpenAI, Anthropic, AWS, Azure, giełdy)NieTak
LicencjaDarmowa, w stylu MozillaKomercyjna, dostępna edycja Free
Wersje DelphiD7 do D13D7 do D13
UtrzymanieAktywne, prowadzone przez producenta (Magenta Systems)Aktywne, prowadzone przez producenta, comiesięczne wydania
Wsparcie komercyjneOpcjonalne płatne kontrakty wsparciaWliczone w płatne edycje

Obsługa WebSocket

ICS dodało komponenty WebSocket w v8 (TIcsWebSocketClient, po stronie serwera przez TSslHttpAppSrv z obsługą WebSocket). Pokrywają RFC 6455 i TLS, co wystarcza w wielu przypadkach użycia. Czego ICS jeszcze nie dostarcza domyślnie to per-message deflate, nazwane kanały / grupy rozgłoszeniowe, automatyczne ponowne łączenie WatchDog, glue klienta JavaScript ani wbudowane protokoły na bazie WebSocket (WebSocket-MQTT, WebSocket-STOMP, WAMP).

sgcWebSockets traktuje WebSocket jako centrum wszechświata. Serwer multipleksuje HTTP i WebSocket na tym samym porcie, dostarcza kanały i pomocniki rozgłaszania, zawiera klienta JavaScript odzwierciedlającego API Delphi i dodaje automatyczne ponowne łączenie WatchDog, ping/pong heartbeat, kolejki komunikatów oraz komponent równoważnika obciążenia w stylu LB. Jeśli żyjesz i oddychasz WebSocket, doświadczenie dewelopera jest zauważalnie bogatsze.

HTTP/2 i HTTP/3

To obszar z największą luką. Na dzień pisania, ICS nie wymienia HTTP/2 jako funkcji pierwszej klasy w notatkach wydania v9 — pewne eksperymentalne prace były omawiane na publicznej liście mailingowej, ale zalecaną ścieżką dla HTTP/2 wewnątrz aplikacji ICS jest użycie oddzielnej biblioteki.

sgcWebSockets dostarcza pełną implementację HTTP/2 od 2018 roku, łącznie z algorytmem kompresji nagłówków HPACK, multipleksowaniem ramek, server push i negocjacją ALPN. Ta sama ścieżka kodu jest używana przez klienta Apple Push Notification, klienta Google FCM i dowolny endpoint serwera HTTP/2, który zbudujesz. HTTP/3 nad QUIC zostało dodane w 2023 roku, używając biblioteki msquic Microsoftu na Windows i ngtcp2 na Linux. Dla aplikacji wymagających najnowszej obsługi transportu jest to znaczący wyróżnik.

Klasyczne protokoły internetowe

ICS wyraźnie wygrywa tutaj. SMTP, POP3, IMAP, FTP, NNTP, DNS i nawet serwer proxy HTTP są wszystkie zawarte i dobrze utrzymywane. Jeśli budujesz klienta poczty, frontend FTP lub przekaźnik SMTP, ICS jest silniejszym punktem wyjścia niż sgcWebSockets (który tych protokołów w ogóle nie dostarcza).

Częste połączenie to użycie ICS dla warstwy poczty/FTP i sgcWebSockets dla warstwy WebSocket / HTTP/2 / MQTT w tym samym produkcie. Obie biblioteki współistnieją bez problemów, ponieważ mają oddzielne przestrzenie nazw jednostek.

SSL / TLS

Obie biblioteki traktują TLS poważnie. ICS jest dobrze znane z bardzo szybkiego śledzenia nowych wydań OpenSSL — nowe wersje minor OpenSSL 3.x są zwykle obsługiwane w ciągu dni. sgcWebSockets również śledzi OpenSSL i dodatkowo obsługuje Windows SChannel i BoringSSL, plus własną warstwę szyfrowania end-to-end dla poufności na poziomie aplikacji ponad TLS.

Doświadczenie dewelopera

ICS używa zdarzeniowego API w stylu pompy komunikatów, które jest bardzo naturalne wewnątrz formularza VCL — upuszczasz komponent, podłączasz OnDataAvailable lub OnRequestDone, a komunikaty Windows napędzają przepływ. Jest lekkie pod względem wątków, łatwe do debugowania i idiomatyczne dla klasycznego rozwoju VCL. Wadą jest to, że skalowanie powyżej pojedynczej pompy komunikatów wymaga albo wariantów serwera z pulą wątków, albo jawnych projektów wieloinstancyjnych.

sgcWebSockets podąża za nowszą konwencją komponentów używaną przez Indy i nowoczesne biblioteki REST: komponent z silnie typowanymi podobiektami opcji (HeartBeat, WatchDog, TLSOptions itd.), zdarzeniowymi callbackami i wątkami roboczymi pod spodem. Transport serwera IOCP skaluje się do dziesiątek tysięcy jednoczesnych połączeń bez zmian w kodzie użytkownika.

Licencja i ceny

ICS jest darmowe do użytku komercyjnego i niekomercyjnego na licencji w stylu Mozilla. Opcjonalne kontrakty wsparcia komercyjnego są dostępne od Magenta Systems. sgcWebSockets jest komercyjne, z edycją Free do użytku niekomercyjnego i czterema płatnymi edycjami (Standard, Professional, Enterprise, All-Access). Płatne edycje zawierają kod źródłowy, comiesięczne aktualizacje i bezpośrednie wsparcie producenta.

Matryca decyzyjna

Jeśli potrzebujesz…Najlepszy wybór
Klientów SMTP, POP3, IMAP, FTP, NNTPICS
Małego, jednoformularzowego pobierania HTTP bez wątkówICS
Śledzenia najnowszego OpenSSLICS (sgc jest bardzo blisko)
Klienta/serwera WebSocket z kanałami, WatchDog, klientem JSsgcWebSockets
Klienta lub serwera HTTP/2, Apple Push, FCMsgcWebSockets
HTTP/3 / QUICsgcWebSockets
Brokera MQTT 5, AMQP 1.0, WAMP, STOMPsgcWebSockets
WebRTC, STUN, TURN, IoT, CoAPsgcWebSockets
Gotowych komponentów OpenAI / Anthropic / API chmurysgcWebSockets
Komercyjnego kontraktu wsparcia producentaObie — sgcWebSockets w pakiecie, ICS opcjonalnie

Podsumowanie

ICS i sgcWebSockets nie są tak naprawdę konkurentami, co raczej narzędziami komplementarnymi. ICS to pięknie zaprojektowana, darmowa, przyjazna pompie komunikatów biblioteka, która błyszczy w klasycznych protokołach internetowych i lekkim HTTP. sgcWebSockets to skoncentrowana biblioteka komercyjna, która opanowuje nowoczesny stos webowy — WebSocket, HTTP/2/3, MQTT, AMQP, WebRTC, IoT, API AI — i skaluje się do dużej liczby jednoczesnych połączeń. Właściwą odpowiedzią dla wielu prawdziwych projektów jest użycie obu, wybierając każdą bibliotekę dla protokołów, w których jest najlepsza.