多节点集群
TsgcWSCluster — 让您的 sgcWebSockets 服务器跨多个节点扩展。任意节点上的发布或 Presence 事件都能触达连接到其他每个节点的订阅者,通过零基础设施的 mesh 网格背板或 Redis 发布/订阅背板实现。您现有的 Publish、channel 和 Presence 代码无需任何改动。
TsgcWSCluster — 让您的 sgcWebSockets 服务器跨多个节点扩展。任意节点上的发布或 Presence 事件都能触达连接到其他每个节点的订阅者,通过零基础设施的 mesh 网格背板或 Redis 发布/订阅背板实现。您现有的 Publish、channel 和 Presence 代码无需任何改动。
将两台或更多 WebSocket 服务器置于负载均衡器之后,在一个节点上发布的消息仍能触达连接到其他节点的订阅者。把组件放在服务器旁边,让各节点相互指向,频道、广播和 Presence 即可在整个集群范围内工作。
TsgcWSCluster
Mesh 网格(零基础设施)或 Redis 发布/订阅
Delphi 7–13(Win32/Win64、Linux64、macOS、Android、iOS)及 .NET
Enterprise
将 sgc 协议附加到集群并启动。一个节点上的客户端可以向某个频道发布消息,其他节点上的客户端都能收到,且无需粘性会话。
uses
sgcWebSocket, sgcWebSocket_Protocols, sgcWebSocket_Cluster;
var
Server: TsgcWebSocketServer;
Protocol: TsgcWSPServer_sgc;
Cluster: TsgcWSCluster;
begin
Server := TsgcWebSocketServer.Create(nil);
Server.Port := 8080;
Protocol := TsgcWSPServer_sgc.Create(nil);
Protocol.Server := Server;
Cluster := TsgcWSCluster.Create(nil);
Cluster.EngineType := clusterMesh; // 零基础设施背板
Cluster.ClusterPort := 5410; // 本节点的 mesh 网格监听端口
Cluster.Peers.Add('192.168.1.101:5410'); // 其他节点
Cluster.Peers.Add('192.168.1.102:5410');
Cluster.Attach(Protocol); // 对该协议的发布/订阅进行集群化
Cluster.Start;
Server.Active := True;
end;
var server = new TsgcWSServer { Port = 8080 };
var protocol = new TsgcWSPServer_sgc { Server = server };
var cluster = new TsgcWSCluster {
EngineType = ClusterEngineType.Mesh, // 零基础设施背板
ClusterPort = 5414,
Protocol = protocol
};
cluster.Peers.Add("192.168.1.101:5414");
cluster.Peers.Add("192.168.1.102:5414");
cluster.Start();
server.Active = true;
两种背板引擎、即插即用的 Attach,以及覆盖整个集群的 Presence — 摘自组件参考文档。
已发布属性 EngineType:clusterMesh(无需外部基础设施)或 clusterRedis(Redis 发布/订阅)。
属性:ClusterPort、Peers。每个节点直接监听并连接到其对等节点 — 无需安装任何额外组件。
属性:RedisHost、RedisPort、RedisChannel,适用于更大规模的部署。
方法:Attach、Detach、Start、Stop。各用一次调用即可对 sgc 协议和 Presence 进行集群化。
成员名单成为所有节点的并集;某个节点掉线后其成员会被清除,因此不会出现幽灵成员。
属性 Ready、ConnectedPeerCount,以及事件 OnPeerConnected、OnPeerDisconnected、OnClusterMessage。
本组件所构建背板的权威来源。