Communication temps réel en Delphi — Choisissez votre protocole

WebSocket, Server-Sent Events, server push HTTP/2, MQTT, AMQP et WebRTC résolvent tous « pousser le client quand quelque chose arrive ». Ils ont des profils opérationnels radicalement différents — cette page est l'antisèche pour choisir le bon.

Une bibliothèque, six protocoles temps réel

sgcWebSockets livre chaque client et serveur temps réel Delphi principal dans la boîte — donc la question n'est plus « puis-je faire cela en Pascal ? » mais « quel protocole convient au job ? »

« Communication temps réel en Delphi » est un terme parapluie — en pratique il couvre six primitives réseau fondamentalement différentes, chacune avec des propriétés différentes de latence, ordonnancement, fan-out, traversée NAT et infrastructure. Choisir incorrectement coûte des mois : vous livrez une boucle de polling REST, atteignez des plafonds de scalabilité, rétrofittez une couche WebSocket, puis découvrez que MQTT aurait été un meilleur choix parce que votre trafic est fondamentalement pub/sub. Cette page est le guide court et opinionné.

Quel protocole — en un tableau

Scannez les lignes ; la colonne avec le plus de vert gagne.

Besoin WebSocket SSE HTTP/2 push MQTT AMQP WebRTC
Bi-directionnelOuiNon (serveur→client seulement)NonOui (pub/sub)Oui (pub/sub)Oui (pair)
Diffusion fan-outImplémenté côté serveurPar client seulementPar flux seulementNatif (topics)Natif (exchanges)Non (1:1)
Supporté par navigateurOuiOuiOuiVia WebSocketVia WebSocketOui
À travers proxy d'entrepriseVia wss://443Oui (ressemble à HTTP)OuiVia WSSVia WSSSouvent (TURN)
Livraison garantieNiveau appNiveau appNiveau appQoS 1/2AcquittéSCTP fiable
Appareils à faible bande passanteMoyenFaibleMoyenExcellentMoyenMoyen
P2P / traversée NATNon (serveur)NonNonNon (broker)Non (broker)Oui (ICE)
Chiffré de bout en boutTLS saut par sautTLS saut par sautTLS saut par sautTLS saut par sautTLS saut par sautDTLS-SRTP E2E
Le serveur peut tourner en DelphiOuiOuiOuiUtiliser un broker externeUtiliser un broker externeOui (signalisation + STUN/TURN)

Version courte

WebSocket

Choix par défaut. Bi-directionnel, faible surcharge, fonctionne dans chaque navigateur. Choisissez-le pour les tableaux de bord live, chat, édition collaborative, protocoles applicatifs personnalisés. Composant →

Server-Sent Events

Choisissez quand le trafic est serveur → client uniquement et que vous voulez le modèle le plus simple possible : une réponse HTTP longue durée qui streame du texte. Intégré dans chaque navigateur sans bibliothèque. SSE →

HTTP/2 push

Utilisez pour envoyer préventivement des sous-ressources (CSS, JS, JSON) à côté du document principal — économise un aller-retour. Pas un canal « push » polyvalent. HTTP/2 →

MQTT

Pub/sub pour IoT, télémétrie, présence mobile, véhicules connectés. QoS 1/2, messages retained, last-will, surcharge wire minuscule. Nécessite un broker. MQTT →

AMQP

Messagerie d'entreprise : files durables, exchanges, routing keys, gestion de dead-letter, RabbitMQ / Azure Service Bus / IBM MQ. Choisissez plutôt que MQTT quand vous avez besoin d'un routage riche. AMQP →

WebRTC

Peer-to-peer direct avec traversée NAT — data channels pour la collaboration, éventuellement audio/vidéo. La seule option pour P2P chiffré de bout en bout. WebRTC →

À quoi ressemble chacun

Le snippet Delphi minimal viable pour se connecter avec chaque protocole — même bibliothèque, même pattern de composant.

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');

GET multiplexé HTTP/2

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]));

Data channel WebRTC

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;

Trois erreurs à éviter

Polling REST en boucle

Si vous vous retrouvez à appeler Get toutes les deux secondes et à diff la réponse, la réponse est presque toujours SSE (serveur→client uniquement) ou WebSocket (bi-directionnel). Les économies de CPU et de bande passante sont régulièrement de 95 %+.

Choisir WebSocket quand MQTT convient

Si votre trafic est fondamentalement fan-out basé sur topics (appareils publiant de la télémétrie, tableaux de bord s'abonnant), faire tourner un protocole JSON-sur-WebSocket personnalisé ré-implémente MQTT mal. Utilisez le broker.

Confondre HTTP/2 push avec server push

Le push promise HTTP/2 est une optimisation de sous-ressources, pas un canal push polyvalent. Pour les flux longue durée serveur-vers-client vous voulez toujours SSE, WebSocket ou MQTT.

Explorez chaque protocole

Composant WebSocket Delphi

Le transport phare.

Client MQTT Delphi

Pub/sub IoT et télémétrie.

Client HTTP/2 Delphi

HTTP multiplexé et push.

Bibliothèque WebRTC Delphi

Data channels peer-to-peer.

Server-Sent Events

Streaming serveur→client simple.

AMQP

Messagerie d'entreprise via RabbitMQ, Service Bus, IBM MQ.

Blog : Load-balancing temps réel

Comment mettre nginx / Envoy / ALB devant WebSocket et HTTP/2.

Essayez chaque protocole depuis un seul installateur

Téléchargez l'essai — les démos pour WebSocket, SSE, MQTT, AMQP, HTTP/2 et WebRTC sont toutes livrées dans la boîte.