@@ -18,6 +18,16 @@ namespace Cyaim.WebSocketServer.Cluster.FreeRedis
1818 /// </summary>
1919 public class FreeRedisClusterTransport : IClusterTransport
2020 {
21+ /// <summary>
22+ /// Redis channel prefix for node-specific messages / Redis 节点特定消息的通道前缀
23+ /// </summary>
24+ private const string ClusterNodeChannelPrefix = "cluster:node:" ;
25+
26+ /// <summary>
27+ /// Redis channel name for broadcast messages / Redis 广播消息的通道名称
28+ /// </summary>
29+ private const string ClusterBroadcastChannel = "cluster:broadcast" ;
30+
2131 private readonly ILogger < FreeRedisClusterTransport > _logger ;
2232 private readonly string _nodeId ;
2333 private readonly string _connectionString ;
@@ -70,11 +80,24 @@ public async Task StartAsync()
7080 _redis = new RedisClient ( _connectionString ) ;
7181
7282 // Subscribe to node-specific channel / 订阅节点特定通道
73- _redis . Subscribe ( $ "cluster:node: { _nodeId } ", ( channel , message ) =>
83+ _redis . Subscribe ( $ "{ ClusterNodeChannelPrefix } { _nodeId } ", ( channel , message ) =>
7484 {
7585 try
7686 {
77- var clusterMessage = JsonSerializer . Deserialize < ClusterMessage > ( message ) ;
87+ var messageJson = message ? . ToString ( ) ;
88+ if ( string . IsNullOrEmpty ( messageJson ) )
89+ {
90+ _logger . LogWarning ( "Received empty message from FreeRedis" ) ;
91+ return ;
92+ }
93+
94+ var clusterMessage = JsonSerializer . Deserialize < ClusterMessage > ( messageJson ) ;
95+ if ( clusterMessage == null )
96+ {
97+ _logger . LogWarning ( "Failed to deserialize cluster message from FreeRedis" ) ;
98+ return ;
99+ }
100+
78101 MessageReceived ? . Invoke ( this , new ClusterMessageEventArgs
79102 {
80103 FromNodeId = clusterMessage . FromNodeId ,
@@ -88,11 +111,24 @@ public async Task StartAsync()
88111 } ) ;
89112
90113 // Subscribe to broadcast channel / 订阅广播通道
91- _redis . Subscribe ( "cluster:broadcast" , ( channel , message ) =>
114+ _redis . Subscribe ( ClusterBroadcastChannel , ( channel , message ) =>
92115 {
93116 try
94117 {
95- var clusterMessage = JsonSerializer . Deserialize < ClusterMessage > ( message ) ;
118+ var messageJson = message ? . ToString ( ) ;
119+ if ( string . IsNullOrEmpty ( messageJson ) )
120+ {
121+ _logger . LogWarning ( "Received empty broadcast message from FreeRedis" ) ;
122+ return ;
123+ }
124+
125+ var clusterMessage = JsonSerializer . Deserialize < ClusterMessage > ( messageJson ) ;
126+ if ( clusterMessage == null )
127+ {
128+ _logger . LogWarning ( "Failed to deserialize cluster broadcast message from FreeRedis" ) ;
129+ return ;
130+ }
131+
96132 if ( clusterMessage . FromNodeId != _nodeId )
97133 {
98134 MessageReceived ? . Invoke ( this , new ClusterMessageEventArgs
@@ -131,8 +167,8 @@ public async Task StopAsync()
131167 {
132168 if ( _redis != null )
133169 {
134- _redis . UnSubscribe ( $ "cluster:node: { _nodeId } ") ;
135- _redis . UnSubscribe ( "cluster:broadcast" ) ;
170+ _redis . UnSubscribe ( $ "{ ClusterNodeChannelPrefix } { _nodeId } ") ;
171+ _redis . UnSubscribe ( ClusterBroadcastChannel ) ;
136172 _redis . Dispose ( ) ;
137173 _redis = null ;
138174 }
@@ -163,13 +199,13 @@ public async Task SendAsync(string nodeId, ClusterMessage message)
163199
164200 try
165201 {
166- if ( _redis == null || ! _redis . IsConnected )
202+ if ( _redis == null )
167203 {
168- _logger . LogWarning ( "FreeRedis client is not initialized or connected " ) ;
204+ _logger . LogWarning ( "FreeRedis client is not initialized" ) ;
169205 return ;
170206 }
171207
172- _redis . Publish ( $ "cluster:node: { nodeId } ", messageJson ) ;
208+ _redis . Publish ( $ "{ ClusterNodeChannelPrefix } { nodeId } ", messageJson ) ;
173209
174210 _logger . LogDebug ( $ "Sent message to node { nodeId } via FreeRedis") ;
175211 }
@@ -193,13 +229,13 @@ public async Task BroadcastAsync(ClusterMessage message)
193229
194230 try
195231 {
196- if ( _redis == null || ! _redis . IsConnected )
232+ if ( _redis == null )
197233 {
198- _logger . LogWarning ( "FreeRedis client is not initialized or connected " ) ;
234+ _logger . LogWarning ( "FreeRedis client is not initialized" ) ;
199235 return ;
200236 }
201237
202- _redis . Publish ( "cluster:broadcast" , messageJson ) ;
238+ _redis . Publish ( ClusterBroadcastChannel , messageJson ) ;
203239
204240 _logger . LogDebug ( "Broadcasted message via FreeRedis" ) ;
205241 }
0 commit comments