什么是 WebSocket

WebSocket 是一种通过单个 TCP 套接字提供双向全双工通信通道的 Web 技术,由 IETF 标准化为 RFC 6455。

实时通信

WebSocket 实现浏览器与服务器之间持久的双向通信,无需持续轮询。

超越 HTTP 请求-响应模式

传统 HTTP 遵循请求-响应模式,客户端必须发起每次交互。WebSocket 将 HTTP 连接升级为持久的全双工通道,客户端和服务器均可随时发送数据。这消除了重复 HTTP 握手的开销,实现了真正的实时交互,例如实时资讯推送、在线游戏、协作编辑和金融行情等应用场景。

  • 双向通信:客户端与服务器均可主动推送数据
  • 持久连接降低延迟与开销
  • 通过标准 TCP 端口 80/443 运行,可穿透防火墙
  • 由 IETF 标准化为 RFC 6455
CLIENT SERVER Full-Duplex ws:// or wss:// RFC 6455

WebSocket 握手

WebSocket 连接以 HTTP 升级请求开始,随后转变为持久的二进制帧协议。

1. HTTP 升级请求

客户端发送携带 Upgrade: websocketConnection: Upgrade 头部的 HTTP GET 请求,以及随机生成的 Sec-WebSocket-Key。

2. 服务器接受

服务器响应 HTTP 101 协议切换,确认升级完成。TCP 连接现已成为 WebSocket 通道。

3. 全双工消息传递

双方可自由发送文本或二进制帧,额外开销仅 2 字节。连接保持开放,直到任意一方主动关闭。

Delphi WebSocket 示例

几行代码即可连接 WebSocket 服务器并收发消息。

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;

准备好构建实时应用程序了吗?

下载 sgcWebSockets,立即为您的 Delphi、C++ Builder 或 .NET 项目添加 WebSocket 支持。