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
| Funkcja | Overbyte ICS (v9, na dzień pisania) | sgcWebSockets |
|---|---|---|
| Klient HTTP/1.1 | Tak (THttpCli, TSslHttpCli) | Tak, wiele backendów |
| Serwer HTTP/1.1 | Tak (TSslHttpAppSrv) | Tak |
| Klient WebSocket | Tak (od v8) | Tak, pełne RFC 6455 |
| Serwer WebSocket | Tak (od v8) | Tak, podprotokoły, per-message deflate, kanały |
| HTTP/2 | Ograniczone / niefunkcja pierwszej klasy | Tak, pełna warstwa HPACK + ramek |
| HTTP/3 / QUIC | Nie | Tak (oparte na msquic) |
| MQTT 3.1.1 / 5.0 | Brak natywnego brokera, tylko podstawowy klient | Pełny klient + broker, obie wersje |
| AMQP 1.0 / 0.9.1 | Nie | Tak |
| STOMP, SSE, WAMP | SSE podstawowe, inne nie | Wszystkie obsługiwane |
| WebRTC / STUN / TURN / DTLS-SRTP | Nie | Tak |
| CoAP, AWS IoT, Azure IoT | Nie | Tak |
| SMTP / POP3 / IMAP / FTP / NNTP | Tak, dojrzałe implementacje | Nie (użyj Indy lub ICS) |
| Powiązania OpenSSL | Tak, bardzo aktualne | Tak, plus SChannel i BoringSSL |
| Ponad 30 owijek REST API (OpenAI, Anthropic, AWS, Azure, giełdy) | Nie | Tak |
| Licencja | Darmowa, w stylu Mozilla | Komercyjna, dostępna edycja Free |
| Wersje Delphi | D7 do D13 | D7 do D13 |
| Utrzymanie | Aktywne, prowadzone przez producenta (Magenta Systems) | Aktywne, prowadzone przez producenta, comiesięczne wydania |
| Wsparcie komercyjne | Opcjonalne płatne kontrakty wsparcia | Wliczone 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, NNTP | ICS |
| Małego, jednoformularzowego pobierania HTTP bez wątków | ICS |
| Śledzenia najnowszego OpenSSL | ICS (sgc jest bardzo blisko) |
| Klienta/serwera WebSocket z kanałami, WatchDog, klientem JS | sgcWebSockets |
| Klienta lub serwera HTTP/2, Apple Push, FCM | sgcWebSockets |
| HTTP/3 / QUIC | sgcWebSockets |
| Brokera MQTT 5, AMQP 1.0, WAMP, STOMP | sgcWebSockets |
| WebRTC, STUN, TURN, IoT, CoAP | sgcWebSockets |
| Gotowych komponentów OpenAI / Anthropic / API chmury | sgcWebSockets |
| Komercyjnego kontraktu wsparcia producenta | Obie — 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.