Komponent WebSocket dla Delphi — Klient i serwer klasy produkcyjnej

Natywna implementacja WebSocket RFC 6455 dla Delphi i C++Builder. Buduj klientów i serwery, które trzymają tysiące jednoczesnych połączeń, działają na Windows, macOS, Linux, iOS i Android i przeżywają niestabilne sieci dzięki wbudowanemu automatycznemu ponownemu łączeniu WatchDog.

Czym jest komponent WebSocket dla Delphi?

Drop-in komponent VCL/FMX, który zamienia protokół WebSocket w API właściwości i zdarzeń, które natywni deweloperzy Delphi rozpoznają.

Komponent WebSocket dla Delphi to niewizualny komponent, który upuszczasz na formularz (lub instancjonujesz w czasie wykonania), aby otworzyć pełnoduplexowy kanał TCP między aplikacją Delphi a dowolnym peerem WebSocket RFC 6455 — przeglądarką, usługą Node.js, reverse proxy nginx, brokerem Mosquitto, endpointem OpenAI Realtime lub innym procesem Delphi. W przeciwieństwie do polling HTTP, WebSocket trzyma połączenie otwarte: serwer może pchać dane w momencie, gdy są dostępne, z latencją milisekundową i bez narzutu HTTP per-wiadomość.

sgcWebSockets jest referencyjną biblioteką WebSocket w ekosystemie Delphi od 2013 roku. Te same komponenty TsgcWebSocketClient i TsgcWebSocketHTTPServer działają bez zmian na Delphi 7 do Delphi 13, na Win32, Win64, Linux64, macOS, iOS i Android oraz na C++Builder C2007 do C13. Nie ma zarządzanego runtime, nie ma warstwy interop .NET, nie ma mostu JavaScript — to czysta implementacja Pascala, która kompiluje się do Twojego binarnego.

Klasa komponentu

TsgcWebSocketClient / TsgcWebSocketHTTPServer

Standardy

RFC 6455, RFC 7692 (permessage-deflate)

Platformy

Windows, macOS, Linux, iOS, Android

Wersje Delphi

Delphi 7 → Delphi 13 + C++Builder

Dlaczego wybrać sgcWebSockets zamiast pisania własnego

Napisanie jednego handlera PING/PONG jest łatwe. Przetrwanie reverse proxy terminującego TLS, modułu WebSocket IIS, firmowego firewalla, mobilnego handoveru komórkowego i testu obciążenia 5000 klientów to nie.

Jedno API, każdy transport

Zwykły WebSocket (ws://), TLS WebSocket (wss://), WebSocket nad HTTP/2, WebSocket nad QUIC/HTTP/3, surowy fallback TCP — ten sam komponent, te same zdarzenia. Przełącz transport, zmieniając jedną właściwość.

Automatyczne ponowne łączenie WatchDog

Włącz WatchDog, a klient ponownie się połączy z wykładniczym backoff, ponownie uwierzytelni, ponownie zasubskrybuje tematy MQTT i odtworzy wszelkie kolejkowane publikacje — kanoniczny wzorzec mobilny / IoT, już napisany.

Wątkowanie jest rozwiązane

Serwer pod maską używa reaktora IOCP / kqueue / epoll. Piszesz handlery zdarzeń; biblioteka planuje je w puli wątków z serializacją per-połączenie.

permessage-deflate

Negocjowane automatycznie według RFC 7692. Tnie ładunki JSON o 70–90 % i jest wspierane przez każdą nowoczesną przeglądarkę i load balancer.

Podprotokoły w komplecie

MQTT 3.1.1/5.0, AMQP 0.9.1/1.0, STOMP, WAMP i Server-Sent Events jadą na wierzchu tego samego transportu WebSocket — jedno gniazdo TCP, wiele protokołów aplikacji.

Również serwer HTTP

TsgcWebSocketHTTPServer serwuje pliki statyczne, endpointy REST, zasoby chronione JWT i OAuth2, odpowiedzi skompresowane gzip i upgrade HTTP/2 w tym samym procesie co Twój endpoint WebSocket.

TLS, który naprawdę działa

OpenSSL (cross-platform), SChannel (Windows kernel TLS) lub HTTP.sys. Certyfikaty klienta, SNI, ALPN, TLS 1.3 z 0-RTT.

Kanały i rozgłaszanie

Serwerowe Channels grupują połączenia po nazwie. Broadcast, BroadcastByChannel i BroadcastByUser rozsyłają do tysięcy peerów w pojedynczym wywołaniu.

Sprawdzone w boju

W produkcji w bankach, na giełdach, w flotach IoT i firmach tradingowych od 2013 roku. Aktualizowane co miesiąc; history.txt śledzi każdą poprawkę.

Lista kontrolna funkcji

Wszystko, co mówi RFC, plus operacyjne utwardzenie, którego potrzebują prawdziwe wdrożenia.

MożliwośćKlientSerwer
Ramkowanie RFC 6455 (text, binary, ping, pong, close)TakTak
permessage-deflate (RFC 7692)TakTak
Fragmentowane i ramki kontynuacjiTakTak
Maskowane wiadomości klientaTakn/d
TLS 1.2 / 1.3 (OpenSSL + SChannel)TakTak
Certyfikaty klienta / mTLSTakTak
Uwierzytelnianie JWT i OAuth2TakTak
HTTP/2 + WebSocket (RFC 8441)TakTak
HTTP/3 + WebSocket nad QUIC (RFC 9220)TakTak
Automatyczne ponowne łączenie WatchDogTakn/d
Heart-beat (PING/PONG)TakTak
Kanały i rozgłaszanien/dTak
Podprotokoły (MQTT / AMQP / STOMP / WAMP / SSE)TakTak
Hosting HTTP.sys (Windows kernel)n/dTak
Tryb daemon LinuxTakTak

Hello WebSocket — klient Delphi w 12 liniach

Upuść TsgcWebSocketClient na formularz, ustaw Host / Port, obsłuż OnMessage, ustaw Active := True.

uses
  sgcWebSocket, sgcWebSocket_Classes;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WS := TsgcWebSocketClient.Create(nil);
  WS.URL := 'wss://echo.websocket.events';
  WS.WatchDog.Enabled := True;
  WS.WatchDog.Interval := 5;
  WS.OnConnect := WSConnect;
  WS.OnMessage := WSMessage;
  WS.OnDisconnect := WSDisconnect;
  WS.Active := True;
end;

procedure TForm1.WSMessage(Connection: TsgcWSConnection; const Text: string);
begin
  Memo1.Lines.Add('<< ' + Text);
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
begin
  WS.WriteData('{"hello":"world"}');
end;

Strona serwera jest symetryczna — upuść TsgcWebSocketHTTPServer, ustaw Port, obsłuż OnConnect i OnMessage, wywołaj Broadcast, aby rozesłać do każdego podłączonego peera.

Wspierane wersje Delphi i C++Builder

Jedno drzewo źródłowe, 22 pakiety runtime — pokrywające każde wydanie Delphi nadal w aktywnym użyciu komercyjnym.

EdycjaWersje
Delphi / RAD Studio7, 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney, 11 Alexandria, 12 Athens, 13
C++Builder2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10, 10.1, 10.2, 10.3, 10.4, 11, 12, 13
FreePascal / Lazarus3.x (przez bazę sgcIndy)
PlatformyWin32, Win64, Linux64, macOS Intel/ARM, iOS device + symulator, Android ARM/ARM64

Eksploruj dalej

Transport WebSocket to fundament każdego innego protokołu w bibliotece.

Czym są WebSockets?

Tło protokołu RFC 6455, handshake, ramkowanie i przypadki użycia.

Podprotokół MQTT

Uruchom MQTT 3.1.1 / 5.0 nad tym samym połączeniem WebSocket.

Klient i serwer HTTP/2

Multipleksowane HTTP/2 z server push i WebSocket-over-HTTP/2.

Wybór protokołu czasu rzeczywistego

WebSocket vs SSE vs HTTP/2 push vs MQTT vs WebRTC — matryca decyzyjna.

Blog: Kanały, grupy i użytkownicy

Przewodnik wzorców rozgłaszania do podzbiorów połączeń.

Blog: WatchDog i BeforeConnect

Jak działa cykl życia automatycznego ponownego łączenia pod maską.

Blog: Szybsza kompresja

Strojenie permessage-deflate dla przepustowości vs CPU.

Często zadawane pytania

Które wersje Delphi są wspierane?

Każde komercyjne wydanie Delphi od Delphi 7 (2002) do Delphi 13 (2025), plus pasujące wersje C++Builder. Dostarczamy 22 oddzielne pakiety runtime — jeden na IDE — z pojedynczego drzewa źródłowego. Nie ma oddzielnego SKU „legacy”; każdy klient dostaje każdą wersję.

Czy komponent WebSocket wspiera TLS / wss://?

Tak. Ustaw URL := 'wss://...' i wybierz dostawcę TLS: OpenSSL (cross-platform, dostarczany z wersją próbną), SChannel (Windows kernel TLS, bez DLL do wdrożenia) lub HTTP.sys (po stronie serwera, certyfikat przechowywany w Windows certificate store). Certyfikaty klienta, SNI, ALPN, TLS 1.3 i 0-RTT są wszystkie wspierane.

Ile jednoczesnych połączeń może obsłużyć serwer?

Na Windows serwer używa IOCP i rutynowo skaluje się do ponad 50 000 jednoczesnych połączeń na proces na sprzęcie commodity. Na Linux reaktor epoll skaluje się podobnie. Twardy limit jest na poziomie OS (deskryptory plików, zakres portów efemerycznych, pamięć kernela), a nie biblioteka.

Jaki jest model licencjonowania?

Bezpłatna od opłat licencyjnych wieczysta licencja per-deweloper z jednym rokiem aktualizacji wliczonym. Dostępne licencje single-developer, team i site — zobacz cennik. Kod źródłowy jest wliczony w każdą edycję komercyjną.

Gotowy dodać WebSockets do swojej aplikacji Delphi?

Pobierz w pełni funkcjonalną 30-dniową wersję próbną — klient, serwer, wszystkie podprotokoły, wszystkie wersje Delphi.