sgcWebSockets vs ICS — Delphi Ağ Karşılaştırması

· İncelemeler

Diğer köklü Delphi ağ kütüphanesi

2026'da bir ağ kütüphanesi arayan Delphi geliştiricileri için üç isim öne çıkar: Indy, Overbyte ICS (François Piette tarafından Internet Component Suite) ve sgcWebSockets. ICS, neredeyse Indy kadar uzun süredir vardır ve özellikle bloke etmeyen, mesaj-pompası tabanlı mimarisini takdir eden geliştiriciler arasında sadık bir takipçi kitlesine sahiptir. sgcWebSockets, modern protokollere odaklanan daha yeni ticari kütüphanedir.

Bu makale ikisini kafa kafaya karşılaştırır: özellik kapsamı, WebSocket desteği, HTTP/2 ve HTTP/3, lisans, geliştirici deneyimi ve ticari destek. Karşılaştırmanın belirli bir ICS sürümüne bağlı olduğu yerlerde, iddialar yazım sırasında herkese açık olarak belgelenen v9 serisine dayanır — kesin bir özellik onayına ihtiyacınız varsa güncel ICS changelog'unu kontrol edin.

Kökenler ve tasarım felsefesi

ICS, 1990'larda bir dizi eşzamansız, olay güdümlü WinSock sarmalayıcısı olarak hayata başladı. Klasik ICS bileşenleri (TWSocket, THttpCli, TSslHttpServer), bloke etmeyen bir mesaj-pompası modeli kullanır: her soket işlemi bir Windows mesajı gönderir ve siz bir olay işleyicisinde yanıt verirsiniz. Bu model Delphi VCL'ye mükemmel uyar — iş parçacığı yok, senkronizasyon ilkeleri yok, ana iş parçacığında çalışır. ICS daha sonra daha yüksek eşzamanlılık için iş parçacığı havuzlu bir HTTP sunucusu (TSslHttpAppSrv) ekledi.

sgcWebSockets, farklı bir sorun etrafında tasarlanmıştır: uzun ömürlü çift yönlü bağlantılar (WebSocket, MQTT, SSE, gRPC tarzı akışlar) ve modern taşıma yığınları (HTTP/2, QUIC üzerinden HTTP/3). Ölçeklendirme için Windows'ta IOCP tabanlı bir sunucu ve düşük gecikmeli mesajlaşma için olay güdümlü bir istemci modeli kullanır. Ayrıca Indy ve ICS'i alternatif HTTP arka uçları olarak sarmalar, böylece ortamınıza uyan taşımayı seçebilirsiniz.

Özellik bazında karşılaştırma

ÖzellikOverbyte ICS (v9, yazım sırasında)sgcWebSockets
HTTP/1.1 istemcisiEvet (THttpCli, TSslHttpCli)Evet, birden fazla arka uç
HTTP/1.1 sunucusuEvet (TSslHttpAppSrv)Evet
WebSocket istemcisiEvet (v8'den beri)Evet, tam RFC 6455
WebSocket sunucusuEvet (v8'den beri)Evet, alt protokoller, mesaj başına deflate, kanallar
HTTP/2Sınırlı / birinci sınıf bir özellik değilEvet, tam HPACK + çerçeve katmanı
HTTP/3 / QUICHayırEvet (msquic tabanlı)
MQTT 3.1.1 / 5.0Yerel aracı yok, yalnızca temel istemciTam istemci + aracı, her iki sürüm
AMQP 1.0 / 0.9.1HayırEvet
STOMP, SSE, WAMPSSE temel, diğerleri hayırTümü destekleniyor
WebRTC / STUN / TURN / DTLS-SRTPHayırEvet
CoAP, AWS IoT, Azure IoTHayırEvet
SMTP / POP3 / IMAP / FTP / NNTPEvet, olgun uygulamalarHayır (Indy veya ICS kullanın)
OpenSSL bağlamalarıEvet, çok güncelEvet, ayrıca SChannel ve BoringSSL
30+ REST API sarmalayıcısı (OpenAI, Anthropic, AWS, Azure, borsalar)HayırEvet
LisansÜcretsiz, mozilla tarzıTicari, Free Edition mevcut
Delphi sürümleriD7'den D13'e kadarD7'den D13'e kadar
BakımAktif, satıcı liderliğinde (Magenta Systems)Aktif, satıcı liderliğinde, aylık sürümler
Ticari destekİsteğe bağlı ücretli destek sözleşmeleriÜcretli sürümlere dahil

WebSocket desteği

ICS, v8'de WebSocket bileşenleri ekledi (TIcsWebSocketClient, WebSocket işleyicileriyle TSslHttpAppSrv aracılığıyla sunucu tarafı). Bunlar, birçok kullanım durumu için yeterli olan RFC 6455 ve TLS'yi kapsar. ICS'in kutudan çıkar çıkmaz henüz sağlamadığı şey, varsayılan olarak mesaj başına deflate, adlandırılmış kanallar / yayın grupları, otomatik yeniden bağlanan bir WatchDog, JavaScript istemci tutkalı veya WebSocket üzerine yerleşik protokoller (WebSocket-MQTT, WebSocket-STOMP, WAMP)'tir.

sgcWebSockets, WebSocket'i evrenin merkezi olarak ele alır. Sunucu, HTTP ve WebSocket'i aynı bağlantı noktasında çoğullar (multiplex), kanallar ve yayın yardımcılarıyla gelir, Delphi API'sini yansıtan bir JavaScript istemcisi içerir ve WatchDog otomatik yeniden bağlanma, heartbeat ping/pong, mesaj kuyrukları ve LB tarzı bir yük dengeleyici bileşeni ekler. WebSocket ile yaşıyor ve nefes alıyorsanız, geliştirici deneyimi belirgin şekilde daha zengindir.

HTTP/2 ve HTTP/3

Bu, en büyük farkın olduğu alandır. Yazım sırasında, ICS v9 sürüm notlarında HTTP/2'yi birinci sınıf bir özellik olarak listelemez — herkese açık posta listesinde bazı deneysel çalışmalar tartışılmıştır ancak bir ICS uygulaması içinde HTTP/2 için önerilen yol, ayrı bir kütüphane kullanmaktır.

sgcWebSockets, 2018'den bu yana HPACK başlık sıkıştırma algoritması, çerçeve çoğullama, server push ve ALPN görüşmesi dahil olmak üzere tam bir HTTP/2 uygulaması sunmaktadır. Aynı kod yolu, Apple Push Notification istemcisi, Google FCM istemcisi ve oluşturduğunuz herhangi bir HTTP/2 sunucu uç noktası tarafından kullanılır. QUIC üzerinden HTTP/3, 2023'te Windows'ta Microsoft'un msquic kütüphanesi ve Linux'ta ngtcp2 kullanılarak eklendi. En son teknoloji taşıma desteğine ihtiyaç duyan uygulamalar için bu anlamlı bir ayırt edicidir.

Klasik İnternet protokolleri

ICS burada açıkça kazanır. SMTP, POP3, IMAP, FTP, NNTP, DNS ve hatta bir HTTP proxy sunucusu dahildir ve iyi bakımlıdır. Bir e-posta istemcisi, bir FTP ön ucu veya bir SMTP geçişi (relay) oluşturuyorsanız, ICS, sgcWebSockets'ten (bu protokolleri hiç sunmaz) daha güçlü bir başlangıç noktasıdır.

Yaygın bir kombinasyon, aynı üründe posta/FTP katmanı için ICS'i ve WebSocket / HTTP/2 / MQTT katmanı için sgcWebSockets'i kullanmaktır. Her iki kütüphane de ayrı birim ad alanlarına sahip oldukları için mutlu bir şekilde bir arada bulunur.

SSL / TLS

Her iki kütüphane de TLS'yi ciddiye alır. ICS, yeni OpenSSL sürümlerini son derece hızlı izlemesiyle iyi bilinir — yeni OpenSSL 3.x küçük sürümleri genellikle günler içinde desteklenir. sgcWebSockets de OpenSSL'yi izler ve ek olarak Windows SChannel ve BoringSSL'yi, ayrıca TLS üzerinde uygulama düzeyinde gizlilik için kendi uçtan uca şifreleme katmanını destekler.

Geliştirici deneyimi

ICS, bir VCL formu içinde çok doğal olan olay güdümlü, mesaj-pompası tarzı bir API kullanır — bir bileşen bırakırsınız, OnDataAvailable veya OnRequestDone'ı bağlarsınız ve Windows mesajları akışı yönlendirir. İş parçacıkları açısından hafiftir, hata ayıklaması kolaydır ve klasik VCL geliştirme için deyimseldir. Olumsuz tarafı, tek bir mesaj pompasının ötesine ölçeklenmenin ya iş parçacığı havuzlu sunucu varyantlarını ya da açık çoklu örnek tasarımlarını gerektirmesidir.

sgcWebSockets, Indy ve modern REST kütüphaneleri tarafından kullanılan daha yeni bileşen kuralını izler: güçlü tür belirtilmiş seçenek alt nesnelerine (HeartBeat, WatchDog, TLSOptions vb.), olay güdümlü geri çağrılara ve arka planda çalışan iş parçacıklarına sahip bir bileşen. IOCP sunucu taşıması, kullanıcı kodu değişiklikleri olmadan on binlerce eşzamanlı bağlantıya ölçeklenir.

Lisans ve fiyatlandırma

ICS, Mozilla tarzı bir lisans altında hem ticari hem de ticari olmayan kullanım için ücretsizdir. İsteğe bağlı ticari destek sözleşmeleri Magenta Systems'ten mevcuttur. sgcWebSockets ticaridir; ticari olmayan kullanım için bir Free Edition'a ve dört ücretli sürüme (Standard, Professional, Enterprise, All-Access) sahiptir. Ücretli sürümler kaynak kodu, aylık güncellemeler ve doğrudan satıcı desteği içerir.

Karar matrisi

İhtiyacınız varsa…En iyi seçim
SMTP, POP3, IMAP, FTP, NNTP istemcileriICS
İş parçacığı olmayan küçük tek formlu HTTP getiriciICS
En son teknoloji OpenSSL izlemeICS (sgc çok yakın)
Kanallar, WatchDog, JS istemcisiyle WebSocket istemci/sunucusgcWebSockets
HTTP/2 istemcisi veya sunucusu, Apple Push, FCMsgcWebSockets
HTTP/3 / QUICsgcWebSockets
MQTT 5 aracısı, AMQP 1.0, WAMP, STOMPsgcWebSockets
WebRTC, STUN, TURN, IoT, CoAPsgcWebSockets
Hazır OpenAI / Anthropic / bulut API bileşenlerisgcWebSockets
Ticari satıcı destek sözleşmesiHer ikisi de — sgcWebSockets dahil, ICS isteğe bağlı

Kapanış düşünceleri

ICS ve sgcWebSockets aslında rakip olmaktan çok tamamlayıcı araçlardır. ICS, klasik İnternet protokollerinde ve hafif HTTP'de mükemmel olan, güzelce tasarlanmış, ücretsiz, mesaj-pompasına uygun bir kütüphanedir. sgcWebSockets, modern web yığınına (WebSocket, HTTP/2/3, MQTT, AMQP, WebRTC, IoT, AI API'leri) sahip olan ve çok sayıda eşzamanlı bağlantıya ölçeklenen, odaklanmış ticari bir kütüphanedir. Birçok gerçek proje için doğru yanıt, her kütüphaneyi en iyi yaptığı protokoller için seçerek ikisini de kullanmaktır.