今天下午,用 Delphi 交付生产级 WebSocket 服务器
符合 RFC 6455 的客户端和服务器,10,000+ 并发连接,TLS 1.3,Windows 上的 IOCP 和 Linux 上的 EPOLL。从 Delphi 7 到 RAD Studio 13,从 .NET 2.0 到 .NET 9,所有目标平台共用一套 API。
- 符合 RFC 6455
- TLS 1.2 和 1.3
- IOCP · EPOLL
- 完整源代码,免版税
一帧进入,一次广播发送给频道上的每个客户端。
符合 RFC 6455 的客户端和服务器,10,000+ 并发连接,TLS 1.3,Windows 上的 IOCP 和 Linux 上的 EPOLL。从 Delphi 7 到 RAD Studio 13,从 .NET 2.0 到 .NET 9,所有目标平台共用一套 API。
一帧进入,一次广播发送给频道上的每个客户端。
同一个发布/订阅任务,在 Delphi、C++Builder 和 C# 中使用相同的组件名称编写。学习一次 API,即可在您交付的每个目标平台上复用。
uses
sgcWebSocket, sgcWebSocket_Classes,
sgcWebSocket_Protocol_sgc_Client;
procedure TForm1.FormCreate(Sender: TObject);
begin
FClient := TsgcWebSocketClient.Create(Self);
FClient.Host := 'www.esegece.com';
FClient.Port := 2053;
FClient.TLS := True;
FClient.OnConnect := ClientConnect;
FProtocol := TsgcWSPClient_sgc.Create(Self);
FProtocol.Client := FClient;
FProtocol.OnMessage := ProtocolMessage;
FClient.Active := True;
end;
procedure TForm1.ClientConnect(Connection: TsgcWSConnection);
begin
FProtocol.Subscribe('orders');
FProtocol.Broadcast('{"id":42,"status":"filled"}', 'orders');
end;
procedure TForm1.ProtocolMessage(Connection: TsgcWSConnection;
const Text: string);
begin
Memo1.Lines.Add(Text);
end;
// uses: sgcWebSocket, sgcWebSocket_Classes,
// sgcWebSocket_Protocol_sgc_Client
FClient = new TsgcWebSocketClient(this);
FClient->Host = "www.esegece.com";
FClient->Port = 2053;
FClient->TLS = true;
FClient->OnConnect = ClientConnect;
FProtocol = new TsgcWSPClient_sgc(this);
FProtocol->Client = FClient;
FProtocol->OnMessage = ProtocolMessage;
FClient->Active = true;
void __fastcall TForm1::ClientConnect(TsgcWSConnection *Connection)
{
FProtocol->Subscribe("orders");
FProtocol->Broadcast("{\"id\":42,\"status\":\"filled\"}", "orders");
}
void __fastcall TForm1::ProtocolMessage(TsgcWSConnection *Connection,
const UnicodeString Text)
{
Memo1->Lines->Add(Text);
}
using esegece.sgcWebSockets;
var client = new TsgcWebSocketClient();
client.Host = "www.esegece.com";
client.Port = 2053;
client.TLS = true;
var protocol = new TsgcWSPClient_sgc();
protocol.Client = client;
protocol.OnMessage += (conn, text) => Console.WriteLine(text);
client.OnConnect += (conn) =>
{
protocol.Subscribe("orders");
protocol.Broadcast("{\"id\":42,\"status\":\"filled\"}", "orders");
};
client.Active = true;
服务器端是镜像的。TsgcWebSocketServer.Broadcast(Text, 'orders') 会把同一份数据分发给该频道的每一位订阅者。
原生的客户端和服务器实现,而不是对浏览器引擎的薄封装。在单个应用程序内混用多种协议,并共享同一个连接池。
为您的基础设施团队已经在运行的代理、中心和服务提供现成的客户端和适配器。
完整协议参考:sgcWebSockets 协议。
长连接、默认加密,在高波动下自我修复。这些正是决定您的服务器能否挺过周一早高峰的关键。
服务器在 Windows 上通过 I/O 完成端口、在 Linux 上通过 epoll 接受连接,并在线程池中分派工作,而不是为每个 socket 分配一个线程。正因如此,单个进程上的 10,000+ 活动连接才不会被上下文切换拖垮。
扩展组件 →选择适合部署环境的 TLS 后端。OpenSSL 3 在 Windows、Linux、macOS、iOS 和 Android 上提供一致的行为。原生 SChannel 使用 Windows 证书存储,因此无需随应用分发或修补 OpenSSL DLL。
TLS 与证书 →HeartBeat 定期发送 ping 帧,因此失效的对端会被检测出来,而不会一直挂着。WatchDog 会按可配置的间隔和重试次数自动重连断开的客户端,网络抖动不会演变成应用重启。
客户端组件 →启用 permessage-deflate 扩展后,重复性高的 JSON 数据在传输时会被压缩,并在握手期间与任何兼容对端协商。二进制帧、分片和 Unicode 校验全部由帧处理层负责。
功能概览 →sgcWebSockets 是旗舰产品。套件的其余部分覆盖界面、SDK、签名,以及底层的 socket。
WebSocket、HTTP/2、HTTP/3、MQTT、AMQP、WebRTC、AI 及 30+ API 集成,面向 Delphi、C++Builder、Lazarus 和 .NET。
了解更多 →OpenAPI 3.x 解析器、Pascal SDK 生成器和 OpenAPI 服务器,以及面向 AWS、Azure、Google Cloud 和 Microsoft Graph 的 1,195+ 预构建 SDK。
了解更多 →文档签名(XAdES、PAdES、CAdES、ASiC)和代码签名(Authenticode、ClickOnce、NuGet、VSIX),提供 10 种密钥提供商和 21 个欧盟国家配置文件。
了解更多 →受到全球各地构建实时应用程序的 Delphi、C++ Builder、Lazarus 和 .NET 开发者的信赖。
sgcWebSockets 非常出色,你们的支持也是最棒的!
你们的 sgcWebSockets 库非常实用,而且易于设置。请继续保持!
非常感谢你们的帮助和支持,我很喜欢你们的组件。