Wat zijn WebSockets?

WebSocket is een webtechnologie die bidirectionele, full-duplex communicatiekanalen biedt over één TCP-socket, gestandaardiseerd door de IETF als RFC 6455.

Realtime communicatie

WebSocket maakt persistente, tweezijdige communicatie mogelijk tussen browsers en servers zonder constante polling.

Verder dan HTTP-request/response

Traditionele HTTP volgt een request/response-patroon waarin de client elke uitwisseling moet initiëren. WebSocket waardeert een HTTP-verbinding op tot een persistent, full-duplex kanaal waarin zowel client als server op elk moment data kunnen versturen. Dat elimineert de overhead van steeds opnieuw uitgevoerde HTTP-handshakes en maakt echte realtime interactie mogelijk, zoals live feeds, online games, samenwerkend bewerken en beursnoteringen.

  • Bidirectioneel: zowel client als server kunnen data pushen
  • Persistente verbinding verlaagt latentie en overhead
  • Werkt over standaard TCP-poort 80/443 en komt door firewalls heen
  • Gestandaardiseerd door de IETF als RFC 6455
CLIENT SERVER Full-Duplex ws:// or wss:// RFC 6455

De WebSocket-handshake

Een WebSocket-verbinding begint als een HTTP-upgrade-request en gaat daarna over op een persistent binair frameprotocol.

1. HTTP-upgrade-request

De client stuurt een HTTP GET-request met de headers Upgrade: websocket en Connection: Upgrade, samen met een random Sec-WebSocket-Key.

2. Server accepteert

De server reageert met HTTP 101 Switching Protocols en bevestigt de upgrade. De TCP-verbinding is nu een WebSocket-kanaal.

3. Full-duplex messaging

Beide kanten kunnen vrij tekst- of binaire frames versturen met slechts 2 bytes overhead. De verbinding blijft open totdat een van beide kanten hem sluit.

Delphi WebSocket-voorbeeld

Verbind met een WebSocket-server en wissel berichten uit in slechts een paar regels code.

uses
  sgcWebSocket_Client, sgcWebSocket_Types;

var
  WSClient: TsgcWebSocketClient;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'echo.websocket.org';
  WSClient.Port := 443;
  WSClient.TLS := True;
  WSClient.OnMessage := OnMessage;
  WSClient.Active := True;
end;

procedure TForm1.OnMessage(Connection: TsgcWSConnection;
  const aText: string);
begin
  // Handle incoming messages
  Memo1.Lines.Add('Received: ' + aText);
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
begin
  // Send a text message to the server
  WSClient.WriteData('Hello, WebSocket!');
end;

Klaar om realtime toepassingen te bouwen?

Download sgcWebSockets en voeg vandaag nog WebSocket-ondersteuning toe aan je Delphi-, C++ Builder- of .NET-projecten.