Skip to content

Commit 1e6a71c

Browse files
committed
fix: 客户端向集群发送消息问题;release version
1 parent c2fd493 commit 1e6a71c

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

Cyaim.WebSocketServer/Cluster/Cyaim.WebSocketServer.Cluster.Hybrid/HybridClusterTransport.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,10 @@ private async Task<bool> HandleMessageAsync(byte[] body, MessageProperties prope
477477
return true; // Ack to remove from queue / 确认以从队列中移除
478478
}
479479

480-
// Check for duplicate messages using message ID / 使用消息ID检查重复消息
480+
// Check for duplicate messages using message ID ONLY / 仅使用消息ID检查重复消息
481+
// IMPORTANT: Deduplication is based on MessageId, NOT message content / 重要:去重基于 MessageId,而不是消息内容
482+
// This ensures that developers can send the same message content to different clients without being deduplicated /
483+
// 这确保了开发者可以向不同的客户端发送相同的消息内容而不会被去重
481484
// For broadcast messages, use "MessageId:FromNodeId" as key to allow same message from same sender to be processed once per node
482485
// For targeted messages, use "MessageId:FromNodeId:ToNodeId" to allow same message to different targets
483486
// 对于广播消息,使用 "MessageId:FromNodeId" 作为键,允许来自同一发送者的相同消息在每个节点上处理一次

Cyaim.WebSocketServer/Cyaim.WebSocketServer/Infrastructure/Cluster/ClusterRouter.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,9 +307,15 @@ private async Task<bool> ForwardToNodeAsync(string targetNodeId, string connecti
307307
MessageType = messageType
308308
};
309309

310+
// 为每个连接生成唯一的 MessageId,确保即使消息内容相同,也不会被去重
311+
// 格式:{nodeId}:{targetNodeId}:{connectionId}:{timestamp}:{guid}
312+
// 这样可以确保每个连接、每个时间点的消息都有唯一的 MessageId
313+
var uniqueMessageId = $"{_nodeId}:{targetNodeId}:{connectionId}:{DateTime.UtcNow.Ticks}:{Guid.NewGuid():N}";
314+
310315
var message = new ClusterMessage
311316
{
312317
Type = ClusterMessageType.ForwardWebSocketMessage,
318+
MessageId = uniqueMessageId, // 设置唯一的 MessageId,避免基于消息内容去重
313319
Payload = JsonSerializer.Serialize(forwardMessage)
314320
};
315321

0 commit comments

Comments
 (0)