Delphi WebSocket Bileşeni — Üretim Düzeyinde İstemci ve Sunucu

Delphi ve C++Builder için yerel bir RFC 6455 WebSocket uygulaması. Binlerce eş zamanlı bağlantıyı tutan, Windows, macOS, Linux, iOS ve Android üzerinde çalışan ve yerleşik WatchDog otomatik yeniden bağlanma ile kararsız ağlarda ayakta kalan istemciler ve sunucular oluşturun.

Delphi WebSocket bileşeni nedir?

WebSocket protokolünü, yerel Delphi geliştiricilerinin tanıdığı bir özellik-ve-olay API'sine dönüştüren hazır eklenti bir VCL/FMX bileşeni.

Bir Delphi WebSocket bileşeni, bir Delphi uygulaması ile herhangi bir RFC 6455 WebSocket eşi — bir tarayıcı, bir Node.js hizmeti, bir nginx ters proxy'si, bir Mosquitto aracısı, bir OpenAI Realtime uç noktası veya başka bir Delphi süreci — arasında tam çift yönlü bir TCP kanalı açmak için bir forma bıraktığınız (veya çalışma zamanında örneklediğiniz) görsel olmayan bir bileşendir. Yoklama yapan HTTP'nin aksine, bir WebSocket bağlantıyı açık tutar: sunucu, veriyi kullanılabilir olduğu anda, milisaniye gecikmeyle ve mesaj başına HTTP ek yükü olmadan iletebilir.

sgcWebSockets, 2013'ten beri Delphi ekosistemindeki referans WebSocket kütüphanesi olmuştur. Aynı TsgcWebSocketClient ve TsgcWebSocketHTTPServer bileşenleri, Delphi 7'den Delphi 13'e kadar, Win32, Win64, Linux64, macOS, iOS ve Android üzerinde ve C++Builder C2007'den C13'e kadar değişmeden çalışır. Yönetilen çalışma zamanı, .NET birlikte çalışma katmanı veya JavaScript köprüsü yoktur — ikili dosyanıza derlenen saf bir Pascal uygulamasıdır.

Bileşen sınıfı

TsgcWebSocketClient / TsgcWebSocketHTTPServer

Standartlar

RFC 6455, RFC 7692 (permessage-deflate)

Platformlar

Windows, macOS, Linux, iOS, Android

Delphi sürümleri

Delphi 7 → Delphi 13 + C++Builder

Neden kendinizinkini yazmak yerine sgcWebSockets'i seçmelisiniz

Tek bir PING/PONG işleyici yazmak kolaydır. TLS sonlandıran bir ters proxy, bir IIS WebSocket modülü, bir kurumsal güvenlik duvarı, bir mobil hücresel devir ve 5.000 istemcilik bir yük testinde ayakta kalmak ise değildir.

Tek API, her taşıma

Düz WebSocket (ws://), TLS WebSocket (wss://), HTTP/2 üzerinden WebSocket, QUIC/HTTP/3 üzerinden WebSocket, ham TCP yedeği — aynı bileşen, aynı olaylar. Tek bir özelliği değiştirerek taşımayı değiştirin.

WatchDog otomatik yeniden bağlanma

WatchDog etkinleştirin; istemci üstel geri çekilme ile yeniden bağlanır, yeniden kimlik doğrular, MQTT konularına yeniden abone olur ve kuyruğa alınmış yayımları yeniden oynatır — klasik mobil / IoT deseni, zaten yazılmış.

İş parçacığı çözüldü

Sunucu arka planda bir IOCP / kqueue / epoll reaktörü kullanır. Olay işleyicileri siz yazarsınız; kütüphane bunları bağlantı başına serileştirme ile bir iş parçacığı havuzu üzerinde zamanlar.

permessage-deflate

RFC 7692'ye göre otomatik olarak anlaşılır. JSON yüklerini %70–90 oranında azaltır ve her modern tarayıcı ve yük dengeleyici tarafından desteklenir.

Alt protokoller dahil

MQTT 3.1.1/5.0, AMQP 0.9.1/1.0, STOMP, WAMP ve Server-Sent Events aynı WebSocket taşıması üzerinde çalışır — bir TCP yuvası, birden çok uygulama protokolü.

HTTP sunucusu da

TsgcWebSocketHTTPServer, WebSocket uç noktanızla aynı süreçte statik dosyalar, REST uç noktaları, JWT ve OAuth2 korumalı kaynaklar, gzip ile sıkıştırılmış yanıtlar ve HTTP/2 yükseltmesi sunar.

Gerçekten çalışan TLS

OpenSSL (çok platformlu), SChannel (Windows çekirdek TLS) veya HTTP.sys. İstemci sertifikaları, SNI, ALPN, 0-RTT ile TLS 1.3.

Kanallar ve yayın

Sunucu tarafı Channels bağlantıları ada göre gruplandırır. Broadcast, BroadcastByChannel ve BroadcastByUser tek bir çağrıda binlerce eşe dağıtım yapar.

Sahada test edilmiş

2013'ten beri bankalarda, borsalarda, IoT filolarında ve ticaret şirketlerinde üretimde. Her ay güncellenir; history.txt her düzeltmeyi izler.

Özellik kontrol listesi

RFC'nin söylediği her şey, ayrıca gerçek dağıtımların ihtiyaç duyduğu operasyonel sertleştirme.

YetenekİstemciSunucu
RFC 6455 çerçeveleme (metin, ikili, ping, pong, close)EvetEvet
permessage-deflate (RFC 7692)EvetEvet
Parçalanmış ve devam çerçeveleriEvetEvet
Maskelenmiş istemci mesajlarıEvetyok
TLS 1.2 / 1.3 (OpenSSL + SChannel)EvetEvet
İstemci sertifikaları / mTLSEvetEvet
JWT ve OAuth2 kimlik doğrulamasıEvetEvet
HTTP/2 + WebSocket (RFC 8441)EvetEvet
QUIC üzerinden HTTP/3 + WebSocket (RFC 9220)EvetEvet
WatchDog otomatik yeniden bağlanmaEvetyok
Heart-beat (PING/PONG)EvetEvet
Kanallar ve yayınyokEvet
Alt protokoller (MQTT / AMQP / STOMP / WAMP / SSE)EvetEvet
HTTP.sys barındırma (Windows çekirdeği)yokEvet
Linux daemon moduEvetEvet

Merhaba WebSocket — 12 satırda Delphi istemcisi

Forma bir TsgcWebSocketClient bırakın, Host / Port ayarlayın, OnMessage olayını işleyin, Active := True yapın.

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;

Sunucu tarafı simetriktir — bir TsgcWebSocketHTTPServer bırakın, Port ayarlayın, OnConnect ve OnMessage olaylarını işleyin, bağlı her eşe dağıtım yapmak için Broadcast çağırın.

Desteklenen Delphi ve C++Builder sürümleri

Tek bir kaynak ağacı, 22 çalışma zamanı paketi — hâlâ aktif ticari kullanımdaki her Delphi sürümünü kapsar.

SürümVersiyonlar
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 (sgcIndy tabanı aracılığıyla)
PlatformlarWin32, Win64, Linux64, macOS Intel/ARM, iOS cihaz + simülatör, Android ARM/ARM64

Keşfetmeye devam edin

WebSocket taşıması, kütüphanedeki diğer her protokolün temelidir.

WebSocket nedir?

RFC 6455 protokolü, el sıkışma, çerçeveleme ve kullanım senaryoları hakkında arka plan.

MQTT alt protokolü

MQTT 3.1.1 / 5.0'ı aynı WebSocket bağlantısı üzerinden çalıştırın.

HTTP/2 istemcisi ve sunucusu

Sunucu push ve HTTP/2 üzerinden WebSocket ile çoklanmış HTTP/2.

Gerçek zamanlı protokol seçici

WebSocket ile SSE, HTTP/2 push, MQTT ve WebRTC karşılaştırması — karar matrisi.

Blog: Kanallar, gruplar ve kullanıcılar

Bağlantı alt kümelerine yayın yapmak için desen kılavuzu.

Blog: WatchDog ve BeforeConnect

Otomatik yeniden bağlanma yaşam döngüsünün arka planda nasıl çalıştığı.

Blog: Daha hızlı sıkıştırma

permessage-deflate'i verime karşı CPU için ayarlama.

Sıkça sorulan sorular

Hangi Delphi sürümleri desteklenir?

Delphi 7'den (2002) Delphi 13'e (2025) kadar her ticari Delphi sürümü, ayrıca eşleşen C++Builder sürümleri. Tek bir kaynak ağacından 22 ayrı çalışma zamanı paketi — her IDE için bir tane — sunuyoruz. Ayrı bir “eski” SKU yoktur; her müşteri her sürümü alır.

WebSocket bileşeni TLS / wss:// destekliyor mu?

Evet. URL := 'wss://...' ayarlayın ve bir TLS sağlayıcısı seçin: OpenSSL (çok platformlu, denemeyle birlikte gelir), SChannel (Windows çekirdek TLS, dağıtılacak DLL yok) veya HTTP.sys (sunucu tarafı, sertifika Windows sertifika deposunda saklanır). İstemci sertifikaları, SNI, ALPN, TLS 1.3 ve 0-RTT'nin tümü desteklenir.

Sunucu kaç eş zamanlı bağlantıyı işleyebilir?

Windows'ta sunucu IOCP kullanır ve sıradan donanımda süreç başına rutin olarak 50.000+ eş zamanlı bağlantıya ölçeklenir. Linux'ta epoll reaktörü benzer şekilde ölçeklenir. Kesin sınır kütüphane değil, işletim sistemi düzeyindedir (dosya tanımlayıcıları, geçici bağlantı noktası aralığı, çekirdek belleği).

Lisanslama modeli nedir?

Bir yıllık güncelleme dahil, telifsiz geliştirici başına süresiz lisans. Tek geliştirici, ekip ve site lisansları mevcuttur — fiyatlandırmaya bakın. Kaynak kodu her ticari sürümle birlikte gelir.

Delphi uygulamanıza WebSocket eklemeye hazır mısınız?

Tamamen işlevsel 30 günlük denemeyi indirin — istemci, sunucu, tüm alt protokoller, tüm Delphi sürümleri.