From 84cdbe3a09a5e02c3c1fd34e29cbb61f2d8f4116 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Thu, 18 Nov 2021 18:32:56 +0800 Subject: [PATCH] =?UTF-8?q?doc[net]:=20=E6=9B=B4=E6=96=B0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/zfoo/net/router/Router.java | 2 +- .../zfoo/net/router/route/SignalBridge.java | 20 ++++++++++------- .../zfoo/net/router/PacketSignalArray.java | 22 +++++++++---------- .../com/zfoo/net/router/PacketSignalMap.java | 8 +++---- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/router/Router.java b/net/src/main/java/com/zfoo/net/router/Router.java index 831ada16..c441ba87 100644 --- a/net/src/main/java/com/zfoo/net/router/Router.java +++ b/net/src/main/java/com/zfoo/net/router/Router.java @@ -76,7 +76,7 @@ public class Router implements IRouter { return; } - // 发送者(客户端)同步和异步消息的接收,发送者通过packetId判断重复 + // 发送者(客户端)同步和异步消息的接收,发送者通过signalId判断重复 if (attachment != null) { switch (attachment.packetType()) { case SIGNAL_PACKET: diff --git a/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java b/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java index 35ea0ff6..4e4e41db 100644 --- a/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java +++ b/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java @@ -34,36 +34,40 @@ public class SignalBridge { // equal with 32767 private static final int SIGNAL_MASK = 0B00000000_00000000_01111111_11111111; + /** + * 用来保存同步或异步请求的SignalAttachment附加包,signalId和SIGNAL_MASK取与的结果hash作为数组索引,使用AtomicReferenceArray只是为了提升性能 + */ private static final AtomicReferenceArray signalAttachmentArray = new AtomicReferenceArray<>(SIGNAL_MASK + 1); /** - * Session控制同步或异步的附加包,key:packetId + * 用来保存同步或异步请求的SignalAttachment附加包,key:signalId */ private static final Map signalAttachmentMap = new ConcurrentHashMap<>(1000); public static void addSignalAttachment(SignalAttachment signalAttachment) { - var packetId = signalAttachment.getSignalId(); - var hash = packetId & SIGNAL_MASK; + var signalId = signalAttachment.getSignalId(); + var hash = signalId & SIGNAL_MASK; + // 使用AtomicReferenceArray只是为了提升性能,仅使用ConcurrentHashMap依然可以运行 if (signalAttachmentArray.compareAndSet(hash, null, signalAttachment)) { return; } - signalAttachmentMap.put(packetId, signalAttachment); + signalAttachmentMap.put(signalId, signalAttachment); } public static SignalAttachment removeSignalAttachment(SignalAttachment signalAttachment) { return removeSignalAttachment(signalAttachment.getSignalId()); } - public static SignalAttachment removeSignalAttachment(int packetId) { - var hash = packetId & SIGNAL_MASK; + public static SignalAttachment removeSignalAttachment(int signalId) { + var hash = signalId & SIGNAL_MASK; var attachment = signalAttachmentArray.get(hash); - if (attachment != null && attachment.getSignalId() == packetId && signalAttachmentArray.compareAndSet(hash, attachment, null)) { + if (attachment != null && attachment.getSignalId() == signalId && signalAttachmentArray.compareAndSet(hash, attachment, null)) { return attachment; } - return signalAttachmentMap.remove(packetId); + return signalAttachmentMap.remove(signalId); } public static void status() { diff --git a/net/src/test/java/com/zfoo/net/router/PacketSignalArray.java b/net/src/test/java/com/zfoo/net/router/PacketSignalArray.java index 4ba9202e..182c653c 100644 --- a/net/src/test/java/com/zfoo/net/router/PacketSignalArray.java +++ b/net/src/test/java/com/zfoo/net/router/PacketSignalArray.java @@ -36,30 +36,28 @@ public class PacketSignalArray { private static final AtomicReferenceArray signalPacketArray = new AtomicReferenceArray<>(SIGNAL_MASK + 1); /** - * Session控制同步或异步的附加包,key:packetId + * Session控制同步或异步的附加包,key:signalId */ private static final Map signalAttachmentMap = new ConcurrentHashMap<>(1000); - public static void addSignalAttachment(int packetId) { - var hash = packetId & SIGNAL_MASK; + public static void addSignalAttachment(int signalId) { + var hash = signalId & SIGNAL_MASK; - if (signalPacketArray.compareAndSet(hash, null, packetId)) { + if (signalPacketArray.compareAndSet(hash, null, signalId)) { return; } -// logger.info("add [packetId:{}] [oldPacketId:{}]", packetId, signalPacketArray.get(hash)); - signalAttachmentMap.put(packetId, packetId); + signalAttachmentMap.put(signalId, signalId); } - public static void removeSignalAttachment(int packetId) { - var hash = packetId & SIGNAL_MASK; - var oldPacketId = signalPacketArray.get(hash); + public static void removeSignalAttachment(int signalId) { + var hash = signalId & SIGNAL_MASK; + var oldSignalId = signalPacketArray.get(hash); - if (oldPacketId != null && oldPacketId == packetId && signalPacketArray.compareAndSet(hash, oldPacketId, null)) { + if (oldSignalId != null && oldSignalId == signalId && signalPacketArray.compareAndSet(hash, oldSignalId, null)) { return; } -// logger.info("remove [packetId:{}] [oldPacketId:{}]", packetId, oldPacketId); - signalAttachmentMap.remove(packetId); + signalAttachmentMap.remove(signalId); } public static void status() { diff --git a/net/src/test/java/com/zfoo/net/router/PacketSignalMap.java b/net/src/test/java/com/zfoo/net/router/PacketSignalMap.java index 5b77c698..33491ef6 100644 --- a/net/src/test/java/com/zfoo/net/router/PacketSignalMap.java +++ b/net/src/test/java/com/zfoo/net/router/PacketSignalMap.java @@ -31,13 +31,13 @@ public class PacketSignalMap { private static final Map signalAttachmentMap = new ConcurrentHashMap<>(1_0000); - public static void addSignalAttachment(int packetId) { - signalAttachmentMap.put(packetId, packetId); + public static void addSignalAttachment(int signalId) { + signalAttachmentMap.put(signalId, signalId); } - public static void removeSignalAttachment(int packetId) { - signalAttachmentMap.remove(packetId); + public static void removeSignalAttachment(int signalId) { + signalAttachmentMap.remove(signalId); } public static void status() {