Real-time-communicatie in Delphi — Kies je protocol

WebSocket, Server-Sent Events, HTTP/2-server-push, MQTT, AMQP en WebRTC lossen allemaal “push de client wanneer er iets gebeurt” op. Ze hebben radicaal verschillende operationele profielen — deze pagina is de cheatsheet voor het juiste te kiezen.

Een bibliotheek, zes real-time-protocollen

sgcWebSockets levert elke mainstream Delphi real-time-client en -server in de doos — dus de vraag is niet langer “kan ik dit in Pascal?” maar “welk protocol past bij de klus?”

Real-time-communicatie in Delphi” is een paraplu-term — in de praktijk dekt het zes fundamenteel verschillende netwerkprimitieven, elk met andere latentie, ordening, fan-out, NAT-traversal en infrastructuur-eigenschappen. Verkeerd kiezen kost maanden: je levert een polling REST-loop, raakt schaalbaarheidsplafonds, retrofit een WebSocket-laag, en ontdekt dan dat MQTT een betere fit was geweest omdat je verkeer fundamenteel pub/sub is. Deze pagina is de korte, opinieerde gids.

Welk protocol — in een tabel

Scan de rijen; de kolom met de meeste groen wint.

Nodig WebSocket SSE HTTP/2-push MQTT AMQP WebRTC
BidirectioneelJaNee (server→client alleen)NeeJa (pub/sub)Ja (pub/sub)Ja (peer)
Fan-out-broadcastServer-geimplementeerdPer-client alleenPer-stream alleenNative (topics)Native (exchanges)Nee (1:1)
Browser-ondersteundJaJaJaVia WebSocketVia WebSocketJa
Door corporate proxyVia wss://443Ja (ziet eruit als HTTP)JaVia WSSVia WSSVaak (TURN)
Gegarandeerde bezorgingApp-niveauApp-niveauApp-niveauQoS 1/2Ack’dSCTP reliable
Low-bandwidth-apparatenMediumLaagMediumUitstekendMediumMedium
P2P / NAT-traversalNee (server)NeeNeeNee (broker)Nee (broker)Ja (ICE)
End-to-end-versleuteldTLS hop-by-hopTLS hop-by-hopTLS hop-by-hopTLS hop-by-hopTLS hop-by-hopDTLS-SRTP E2E
Server kan in Delphi draaienJaJaJaGebruik externe brokerGebruik externe brokerJa (signalling + STUN/TURN)

Korte versie

WebSocket

Standaardkeuze. Bidirectioneel, lage overhead, werkt in elke browser. Kies hem voor live-dashboards, chat, collaboratief bewerken, custom applicatieprotocollen. Component →

Server-Sent Events

Kies wanneer verkeer alleen server → client is en je het simpelst mogelijke model wilt: een langlevende HTTP-response die tekst streamt. Ingebouwd in elke browser zonder bibliotheek. SSE →

HTTP/2-push

Gebruik om preemptief sub-resources (CSS, JS, JSON) naast het hoofddocument te sturen — bespaart een round-trip. Geen general-purpose “push”-kanaal. HTTP/2 →

MQTT

Pub/sub voor IoT, telemetrie, mobile presence, connected vehicles. QoS 1/2, retained messages, last-will, kleine wire-overhead. Vereist een broker. MQTT →

AMQP

Enterprise-messaging: durable queues, exchanges, routing keys, dead-letter-afhandeling, RabbitMQ / Azure Service Bus / IBM MQ. Kies boven MQTT wanneer je rijke routing nodig hebt. AMQP →

WebRTC

Direct peer-to-peer met NAT-traversal — data channels voor samenwerking, uiteindelijk audio/video. De enige optie voor E2E-versleutelde P2P. WebRTC →

Hoe elke eruitziet

Het minimum viable Delphi-snippet om met elk protocol te verbinden — zelfde bibliotheek, zelfde component-patroon.

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;

Drie fouten die het waard zijn te vermijden

REST pollen in een loop

Als je merkt dat je elke twee seconden Get aanroept en de response diff’t, is het antwoord vrijwel altijd SSE (server→client alleen) of WebSocket (bidirectioneel). De CPU- en bandbreedte-besparingen zijn routinematig 95 %+.

WebSocket kiezen wanneer MQTT past

Als je verkeer fundamenteel topic-gebaseerde fan-out is (apparaten die telemetrie publiceren, dashboards die abonneren), implementeert het draaien van een custom JSON-over-WebSocket-protocol MQTT slecht. Gebruik de broker.

HTTP/2-push verwarren met server push

HTTP/2 push promise is een sub-resource-optimalisatie, geen algemeen push-kanaal. Voor langlevende server-naar-client-streams wil je nog steeds SSE, WebSocket of MQTT.

Verken elk protocol

Delphi WebSocket-component

Het vlaggenschip-transport.

Delphi MQTT-client

IoT- en telemetrie-pub/sub.

Delphi HTTP/2-client

Multiplexed HTTP en push.

Delphi WebRTC-bibliotheek

Peer-to-peer data channels.

Server-Sent Events

Eenvoudige server→client-streaming.

AMQP

Enterprise-messaging via RabbitMQ, Service Bus, IBM MQ.

Blog: SSE-client-doorloop

Praktisch SSE-voorbeeld.

Blog: Load-balancing real-time

Hoe nginx / Envoy / ALB voor WebSocket en HTTP/2 te zetten.

Probeer elk protocol vanuit een installer

Download de proefversie — demo’s voor WebSocket, SSE, MQTT, AMQP, HTTP/2 en WebRTC worden allemaal in de doos geleverd.