Delphi'de Gerçek Zamanlı İletişim — Protokolünüzü Seçin

WebSocket, Server-Sent Events, HTTP/2 sunucu push, MQTT, AMQP ve WebRTC; hepsi “bir şey olduğunda istemciye gönder” sorununu çözer. Bunların kökten farklı operasyonel profilleri vardır — bu sayfa, doğru olanı seçmek için bir kopya kâğıdıdır.

Tek kütüphane, altı gerçek zamanlı protokol

sgcWebSockets, her yaygın Delphi gerçek zamanlı istemci ve sunucusunu kutu içinde sunar — böylece soru “bunu Pascal'da yapabilir miyim?” olmaktan çıkar ve “hangi protokol işe uygun?” olur.

Delphi'de gerçek zamanlı iletişim” bir şemsiye terimdir — pratikte, her biri farklı gecikme, sıralama, fan-out, NAT geçişi ve altyapı özelliklerine sahip altı temelde farklı ağ ilkelini kapsar. Yanlış seçim aylara mal olur: bir yoklamalı REST döngüsü yayınlarsınız, ölçeklenebilirlik tavanlarına çarparsınız, bir WebSocket katmanı sonradan eklersiniz, ardından trafiğiniz temelde pub/sub olduğu için MQTT'nin daha uygun olacağını keşfedersiniz. Bu sayfa kısa, görüş bildiren bir kılavuzdur.

Hangi protokol — tek bir tabloda

Satırları tarayın; en çok yeşile sahip sütun kazanır.

İhtiyaç WebSocket SSE HTTP/2 push MQTT AMQP WebRTC
Çift yönlüEvetHayır (yalnızca sunucu→istemci)HayırEvet (pub/sub)Evet (pub/sub)Evet (eş)
Fan-out yayınıSunucu tarafından uygulanırYalnızca istemci başınaYalnızca akış başınaYerel (topic'ler)Yerel (exchange'ler)Hayır (1:1)
Tarayıcı desteğiEvetEvetEvetWebSocket aracılığıylaWebSocket aracılığıylaEvet
Kurumsal proxy üzerindenwss://443 aracılığıylaEvet (HTTP gibi görünür)EvetWSS aracılığıylaWSS aracılığıylaÇoğu zaman (TURN)
Garantili teslimatUygulama seviyesiUygulama seviyesiUygulama seviyesiQoS 1/2OnaylıSCTP güvenilir
Düşük bant genişlikli cihazlarOrtaDüşükOrtaMükemmelOrtaOrta
P2P / NAT geçişiHayır (sunucu)HayırHayırHayır (broker)Hayır (broker)Evet (ICE)
Uçtan uca şifreliTLS atlama-atlamaTLS atlama-atlamaTLS atlama-atlamaTLS atlama-atlamaTLS atlama-atlamaDTLS-SRTP E2E
Sunucu Delphi'de çalışabilirEvetEvetEvetHarici broker kullanınHarici broker kullanınEvet (sinyalleşme + STUN/TURN)

Kısa versiyon

WebSocket

Varsayılan seçim. Çift yönlü, düşük ek yük, her tarayıcıda çalışır. Canlı panolar, sohbet, işbirlikçi düzenleme, özel uygulama protokolleri için seçin. Bileşen →

Server-Sent Events

Trafik yalnızca sunucu → istemci olduğunda ve mümkün olan en basit modeli istediğinizde seçin: metin akıtan uzun ömürlü bir HTTP yanıtı. Kütüphane olmadan her tarayıcıya yerleşiktir. SSE →

HTTP/2 push

Ana belgenin yanında alt kaynakları (CSS, JS, JSON) önceden göndermek için kullanın — bir gidiş-dönüşü ortadan kaldırır. Genel amaçlı bir “push” kanalı değildir. HTTP/2 →

MQTT

IoT, telemetri, mobil presence, bağlı araçlar için pub/sub. QoS 1/2, saklanan mesajlar, last-will, çok küçük tel ek yükü. Bir broker gerektirir. MQTT →

AMQP

Kurumsal mesajlaşma: kalıcı kuyruklar, exchange'ler, yönlendirme anahtarları, dead-letter işleme, RabbitMQ / Azure Service Bus / IBM MQ. Zengin yönlendirmeye ihtiyacınız olduğunda MQTT yerine seçin. AMQP →

WebRTC

NAT geçişiyle doğrudan eşler arası — işbirliği için veri kanalları, sonunda ses/video. E2E şifreli P2P için tek seçenek. WebRTC →

Her biri nasıl görünür

Her protokolle bağlanmak için minimum uygulanabilir Delphi kod parçası — aynı kütüphane, aynı bileşen deseni.

WebSocket

WS := TsgcWebSocketClient.Create(nil);
WS.URL := 'wss://echo.websocket.events';
WS.OnMessage := DoMessage;
WS.Active := True;
WS.WriteData('hello');

Server-Sent Events

SSE := TsgcWSPClient_SSE.Create(nil);
SSE.URL := 'https://stream.example.com/events';
SSE.OnEvent := DoEvent;
SSE.Active := True;

MQTT

MQTT := TsgcWSPClient_MQTT.Create(nil);
MQTT.Client := WSClient;
MQTT.OnMQTTPublish := DoMqttPublish;
WSClient.Active := True;
MQTT.Subscribe('sensors/+/temperature', mtqsAtLeastOnce);

AMQP

AMQP := TsgcWSPClient_AMQP.Create(nil);
AMQP.Client := WSClient;
AMQP.OnAMQPMessage := DoAmqpMessage;
WSClient.Active := True;
AMQP.Consume('orders');

HTTP/2 multiplexed GET

H2 := TsgcHTTP2Client.Create(nil);
H2.Host := 'api.example.com';
H2.Port := 443;
H2.TLS  := True;
H2.OnResponse := DoResponse;
H2.Connect;
for i := 1 to 10 do H2.Get(Format('/items/%d', [i]));

WebRTC data channel

RTC := TsgcWSPClient_WebRTC.Create(nil);
RTC.Client := WSSignal;
RTC.IceServers.Add.URL := 'stun:stun.l.google.com:19302';
RTC.OnDataChannelMessage := DoP2PMessage;
WSSignal.Active := True;
RTC.CreateDataChannel('chat', True, True);
RTC.CreateOffer;

Kaçınmaya değer üç hata

Döngüde REST yoklaması

Kendinizi her iki saniyede bir Get çağırırken ve yanıtın farkını alırken buluyorsanız, cevap neredeyse her zaman SSE (yalnızca sunucu→istemci) veya WebSocket'tir (çift yönlü). CPU ve bant genişliği tasarrufu rutin olarak %95'in üzerindedir.

MQTT uygunken WebSocket seçmek

Trafiğiniz temelde topic tabanlı fan-out ise (telemetri yayınlayan cihazlar, abone olan panolar), özel bir JSON-over-WebSocket protokolü çalıştırmak MQTT'yi kötü bir şekilde yeniden uygular. Broker'ı kullanın.

HTTP/2 push'u sunucu push ile karıştırmak

HTTP/2 push promise, bir alt kaynak optimizasyonudur, genel bir push kanalı değil. Uzun ömürlü sunucudan istemciye akışlar için yine de SSE, WebSocket veya MQTT istersiniz.

Her protokolü keşfedin

Delphi WebSocket bileşeni

Amiral gemisi taşıma.

Delphi MQTT istemcisi

IoT ve telemetri pub/sub.

Delphi HTTP/2 istemcisi

Çoğullanmış HTTP ve push.

Delphi WebRTC kütüphanesi

Eşler arası veri kanalları.

Server-Sent Events

Basit sunucu→istemci akışı.

AMQP

RabbitMQ, Service Bus, IBM MQ aracılığıyla kurumsal mesajlaşma.

Blog: SSE istemci anlatımı

Pratik SSE örneği.

Blog: Gerçek zamanlı yük dengeleme

WebSocket ve HTTP/2'nin önüne nginx / Envoy / ALB nasıl yerleştirilir.

Her protokolü tek bir yükleyiciden deneyin

Denemeyi indirin — WebSocket, SSE, MQTT, AMQP, HTTP/2 ve WebRTC demoları kutu içinde gelir.