İki kütüphane, iki farklı iş
Hemen hemen her Delphi geliştiricisi bir noktada Indy kullanmıştır. IDE ile kutudan çıkar, 1990'ların sonundan beri vardır ve bir kuşak Delphi ağ kodu TIdHTTP, TIdTCPClient, TIdSMTP ve benzerleri üzerine kuruludur. sgcWebSockets, Indy ilk tasarlandığından bu yana ortaya çıkan protokollere (WebSocket, HTTP/2, HTTP/3 / QUIC, MQTT 5, AMQP 1.0, SSE, WAMP, WebRTC, MCP) ve geniş bir REST API entegrasyon kataloğuna odaklanan çok daha yeni ticari bir kütüphanedir.
Embarcadero forumlarındaki ve Stack Overflow'daki en yaygın soru, “Indy ücretsizken neden sgcWebSockets için ödeme yapayım?” sorusunun bir varyasyonudur. Kısa yanıt, farklı sorunları çözdükleri ve birçok gerçek projede sonunda ikisini de kullanacağınızdır. Bu makale, uygulamanıza hangisinin (veya hangi kombinasyonun) uyduğuna karar verebilmeniz için 2026'daki pratik farkları anlatır.
Her kütüphane gerçekte ne yapar
Indy, uzun bir klasik İnternet protokolleri listesine sahip genel amaçlı bir TCP/UDP araç setidir: HTTP/1.1, FTP, SMTP, POP3, IMAP, NNTP, DNS, IRC, Telnet, Whois ve ayrıca bir TCP sunucu çerçevesi. Tasarımı bağlantı başına iş parçacığı ve bloke eden G/Ç'dir. Standart Indy'de yerel bir WebSocket istemcisi veya sunucusu yoktur — birini eklemeniz gerekir ve birkaç topluluk projesi tam olarak bunu karışık sonuçlarla yapar.
sgcWebSockets, modern istemci/sunucu senaryolarına yönelik, odaklanmış, protokol açısından zengin bir kütüphanedir. HTTP/2, QUIC üzerinden HTTP/3, MQTT, AMQP, STOMP, SSE, WAMP, P2P/WebRTC, IoT (CoAP, AWS IoT, Azure IoT), uçtan uca şifreleme ve 30+ API sarmalayıcısı (OpenAI, Anthropic, Google, AWS, Azure, Binance, Coinbase, Kraken, Telegram, WhatsApp vb.) için isteğe bağlı eklentilerle bir çekirdek TsgcWebSocketClient / TsgcWebSocketHTTPServer çifti etrafında düzenlenmiştir.
Önemli ve sıklıkla gözden kaçan bir ayrıntı: sgcWebSockets, taşıma arka uçlarından biri olarak dahili olarak Indy kullanır. Birkaç bileşenin TCP/TLS altyapısı, altta bir Indy TIdTCPClient / TIdHTTPServer'dır, dolayısıyla sgcWebSockets'i kurmak Indy'nin yerini almaz — onun üzerine inşa eder. Kütüphane ayrıca Indy'nin en uygun olmadığı senaryolar için alternatif taşımalar (Synapse tarzı, ICS, SChannel) sunar.
Özellik bazında karşılaştırma
| Özellik | Indy (standart) | sgcWebSockets |
|---|---|---|
| HTTP/1.1 istemcisi | Evet (TIdHTTP) | Evet (TsgcHTTPComponentClient, Indy veya ICS arka ucunu kullanabilir) |
| HTTP/1.1 sunucusu | Evet (TIdHTTPServer) | Evet (TsgcWebSocketHTTPServer, HTTP + WS'yi aynı bağlantı noktasında ele alır) |
| WebSocket istemci/sunucu | Yerel destek yok | Tam RFC 6455, permessage-deflate, alt protokoller, autobahn-test edilmiş |
| HTTP/2 (h2 + h2c) | Hayır | Evet, özel HPACK + çerçeve katmanı |
| HTTP/3 / QUIC | Hayır | Evet (msquic tabanlı) |
| MQTT 3.1.1 ve 5.0 | Hayır | Evet, istemci ve aracı |
| AMQP 1.0 / 0.9.1 | Hayır | Evet |
| STOMP, SSE, WAMP | Hayır | Evet |
| WebRTC / P2P / STUN / TURN | Hayır | Evet |
| CoAP ve IoT bulutu (AWS, Azure) | Hayır | Evet |
| OpenAI, Anthropic, Gemini, MCP | Hayır | Evet, özel bileşenler |
| FTP / SMTP / POP3 / IMAP | Evet | Hayır (bunlar için Indy kullanın) |
| Ücretsiz / ticari | Ücretsiz, MIT tarzı | Ticari, Free dahil çeşitli sürümler |
| Delphi sürümleri | D7 ve üzeri (fork'a göre değişir) | D7'den D13'e kadar |
| Aktif bakım | Topluluk (GitHub'da IndyProject) | Satıcı, aylık sürümler |
Indy'nin hâlâ kazandığı yer
Projeniz klasik bir İnternet istemcisiyse (HTTP üzerinden bir dosya indirmek, bir form göndermek, bir SMTP e-postası göndermek, IMAP üzerinden posta almak, eski bir FTP sunucusuyla iletişim kurmak) standart Indy doğru yanıttır. Ücretsizdir, IDE ile birlikte gelir, API tanıdıktır ve başka bir şeye ihtiyacınız yoktur. Aynı şey hobi TCP sunucuları ve Indy'nin yerel olarak sunduğu protokoller (NNTP, IRC, Telnet, Whois) için de geçerlidir. Bu kullanım durumları için ücretli bir kütüphane eklemek aşırıya kaçmaktır.
Indy ayrıca, zaten Indy türlerini kullanan kodla birlikte çalışmanız gerektiğinde de açık seçimdir — örneğin, bir TIdSSLIOHandlerSocketOpenSSL veya bir TIdHTTPServerCommandHandler bekleyen bileşenler.
sgcWebSockets'in doğru araç olduğu yer
Modern web yığınını içeren her şey sgcWebSockets ile önemli ölçüde daha kolaydır. Somut olarak:
- WebSocket — tam çift yönlü (full-duplex) mesajlaşma birinci sınıf bir özelliktir. Sunucu, HTTP ve WebSocket'i aynı bağlantı noktasında ele alır, alt protokolleri yönetir, sıkıştırmayı destekler ve kutudan çıkar çıkmaz otomatik yeniden bağlanan WatchDog ile entegre olur.
- HTTP/2 ve HTTP/3 — Apple Push Notifications, Google hizmetleri ve h2 asgarisini zorunlu kılmaya başlayan giderek artan sayıda REST API için gereklidir. Indy'nin burada bir yanıtı yoktur.
- Mesajlaşma aracıları — MQTT 5, AMQP 1.0, STOMP, WAMP ve SSE'nin tümü, TLS, yeniden bağlanma ve kimlik doğrulamayla kullanıma hazır bileşenler olarak gelir.
- Gerçek zamanlı multimedya — tarayıcı uyumlu ses/video ve veri kanalları için WebRTC, ICE, STUN, TURN ve DTLS-SRTP.
- Yapay zeka ve bulut API'leri — OpenAI, Anthropic, Google Gemini, AWS, Azure, Telegram, WhatsApp, Stripe ve birkaç düzine diğeri, ham REST çağrıları yerine türü belirtilmiş bileşenler olarak sarmalanır.
Performans ve ölçeklendirme
Indy'nin bağlantı başına iş parçacığı modeli basit ve doğrudur, ancak bağlam değiştirme darboğaz haline gelmeden önce tipik bir Windows sunucusunda pratik verimi birkaç bin eşzamanlı bağlantı civarında sınırlar. sgcWebSockets, uyumluluk için aynı Indy arka ucunu ve ayrıca Windows'ta süreç başına on binlerce eşzamanlı WebSocket bağlantısında kıyaslanmış IOCP tabanlı bir sunucu taşıması sunar. Saf HTTP verimi için fark daha küçüktür, ancak uzun ömürlü bağlantılar (WebSocket, MQTT, SSE) için mimari fark önemlidir.
Boştaki bağlantı başına bellek ayak izi de IOCP taşımasıyla daha düşüktür çünkü soket başına özel bir işletim sistemi iş parçacığı yoktur. Linux'ta tablo, sgcWebSockets'in gönderdiği Indy fork'u aracılığıyla epoll tabanlı sunucularla benzerdir.
Bakım ve sürüm temposu
Indy, IndyProject GitHub deposunda küçük bir gönüllü grubu tarafından sürdürülür. Sürümler yavaştır ancak kod tabanı kararlıdır. Kritik düzeltmeler (TLS uyumluluğu, modern OpenSSL bağlamaları) gelir ancak her zaman hızlı değil.
sgcWebSockets, eSeGeCe'den aylık sürümleri, herkese açık bir geçmiş dosyası ve doğrudan satıcı desteği olan ticari bir üründür. Yeni Delphi sürümleri genellikle ilk gün desteklenir — Delphi 13 ilk betadan itibaren desteklenmiştir — ve yeni protokol revizyonları (MQTT 5.0.1, HTTP/3 final, MCP spesifikasyon güncellemeleri) yıllar yerine günler içinde gelir.
Lisans ve fiyatlandırma
Indy ücretsizdir ve Delphi ile gelir. sgcWebSockets ticaridir ancak ticari olmayan kullanım için bir Free Edition'a ve ayrıca giderek daha geniş protokol kapsamına sahip ücretli sürümlere (Standard, Professional, Enterprise, All-Access) sahiptir. Çoğu ticari proje, tek bir dağıtılmış müşteriyle tek geliştiricilik bir Professional lisansını haklı çıkarabilir.
Basit bir karar kuralı
Pragmatik bir 2026 genel kuralı:
- SMTP/POP3/IMAP/FTP için, mevcut bir Indy kod tabanı içindeki kısa ömürlü HTTP indirmeleri için veya Indy'nin zaten yerel olarak ele aldığı herhangi bir klasik İnternet protokolü için Indy kullanın.
- WebSocket, HTTP/2, HTTP/3, MQTT, AMQP, WebRTC, IoT veya herhangi bir AI/REST API devreye girdiği anda veya birkaç bin bağlantının ötesine ölçeklenen bir sunucuya ihtiyacınız olduğunda sgcWebSockets kullanın.
- Aynı projede ikisini de kullanın — aslında bu en yaygın desendir. Indy e-posta ve FTP katmanı için kalır, sgcWebSockets gerçek zamanlı ve modern-API katmanını ele alır ve altta aynı Indy SSL/IO altyapısını paylaşırlar.
Kapanış düşünceleri
Indy hiçbir yere gitmiyor — her Delphi araç kutusundaki güvenilir çekiçtir. Ancak 2026 internetini tanımlayan protokoller (WebSocket, HTTP/2/3, MQTT, WebRTC, AI API'leri) Indy tasarlandığında basitçe yoktu. sgcWebSockets bu boşluğu, yararlı olduğunda Indy üzerine inşa eden ve gerektiğinde onun yerini alan odaklanmış, aktif olarak sürdürülen, ticari olarak desteklenen bir kütüphaneyle doldurur. Modern arka uçları hedefleyen yeni projeler için soru artık Indy mi yoksa sgcWebSockets mı? değil — onları nasıl birleştiririm?