mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-06-01 04:11:31 +00:00
perf[protocol]: 增加缓存提高通过class获取协议id的速度
This commit is contained in:
@@ -64,7 +64,7 @@ public class FileChannelMap<V extends IPacket> implements LpMap<V>, Closeable {
|
||||
this.indexFileRandomAccess = new RandomAccessFile(indexFile, "rw");
|
||||
this.indexFileChannel = this.indexFileRandomAccess.getChannel();
|
||||
|
||||
var protocolId = ProtocolManager.getProtocolIdByClass(clazz);
|
||||
var protocolId = ProtocolManager.protocolId(clazz);
|
||||
protocolRegistration = ProtocolManager.getProtocol(protocolId);
|
||||
|
||||
indexBuffer = ByteBufAllocator.DEFAULT.ioBuffer(16);
|
||||
|
||||
@@ -46,7 +46,7 @@ public class FileHeapMap<V extends IPacket> implements LpMap<V> {
|
||||
try {
|
||||
this.dbFile = FileUtils.getOrCreateFile(dbPath, StringUtils.format("{}.db", clazz.getSimpleName()));
|
||||
|
||||
var protocolId = ProtocolManager.getProtocolIdByClass(clazz);
|
||||
var protocolId = ProtocolManager.protocolId(clazz);
|
||||
protocolRegistration = ProtocolManager.getProtocol(protocolId);
|
||||
heapMap = new HeapMap<>();
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ public interface IPacket {
|
||||
* @return 协议号Id
|
||||
*/
|
||||
default short protocolId() {
|
||||
return ProtocolManager.getProtocolIdByClass(this.getClass());
|
||||
return ProtocolManager.protocolId(this.getClass());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,13 +18,10 @@ import com.zfoo.protocol.registration.IProtocolRegistration;
|
||||
import com.zfoo.protocol.registration.ProtocolAnalysis;
|
||||
import com.zfoo.protocol.registration.ProtocolModule;
|
||||
import com.zfoo.protocol.util.AssertionUtils;
|
||||
import com.zfoo.protocol.util.ReflectionUtils;
|
||||
import com.zfoo.protocol.xml.XmlProtocols;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author jaysunxiao
|
||||
@@ -39,6 +36,8 @@ public class ProtocolManager {
|
||||
public static final IProtocolRegistration[] protocols = new IProtocolRegistration[MAX_PROTOCOL_NUM];
|
||||
public static final ProtocolModule[] modules = new ProtocolModule[MAX_MODULE_NUM];
|
||||
|
||||
private static final Map<Class<?>, Short> protocolIdMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
// 初始化默认协议模块
|
||||
modules[0] = ProtocolModule.DEFAULT_PROTOCOL_MODULE;
|
||||
@@ -86,9 +85,15 @@ public class ProtocolManager {
|
||||
return moduleOptional.get();
|
||||
}
|
||||
|
||||
public static short getProtocolIdByClass(Class<?> clazz) {
|
||||
var protocolIdField = ReflectionUtils.getFieldByNameInPOJOClass(clazz, PROTOCOL_ID);
|
||||
return (short) ReflectionUtils.getField(protocolIdField, null);
|
||||
public static short protocolId(Class<?> clazz) {
|
||||
var protocolId = protocolIdMap.get(clazz);
|
||||
if (protocolId == null) {
|
||||
protocolId = ProtocolAnalysis.getProtocolIdByClass(clazz);
|
||||
synchronized (protocolIdMap) {
|
||||
protocolIdMap.put(clazz, protocolId);
|
||||
}
|
||||
}
|
||||
return protocolId;
|
||||
}
|
||||
|
||||
public static void initProtocol(Set<Class<?>> protocolClassSet) {
|
||||
|
||||
@@ -435,6 +435,11 @@ public class ProtocolAnalysis {
|
||||
return allSubProtocolIdSet;
|
||||
}
|
||||
|
||||
public static short getProtocolIdByClass(Class<?> clazz) {
|
||||
var protocolIdField = ReflectionUtils.getFieldByNameInPOJOClass(clazz, PROTOCOL_ID);
|
||||
return (short) ReflectionUtils.getField(protocolIdField, null);
|
||||
}
|
||||
|
||||
// 协议智能语法分析,错误的协议定义将无法启动程序并给出错误警告
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
|
||||
+3
-2
@@ -21,6 +21,7 @@ import com.zfoo.protocol.generate.GenerateOperation;
|
||||
import com.zfoo.protocol.generate.GenerateProtocolDocument;
|
||||
import com.zfoo.protocol.model.Pair;
|
||||
import com.zfoo.protocol.registration.IProtocolRegistration;
|
||||
import com.zfoo.protocol.registration.ProtocolAnalysis;
|
||||
import com.zfoo.protocol.registration.ProtocolRegistration;
|
||||
import com.zfoo.protocol.registration.field.*;
|
||||
import com.zfoo.protocol.serializer.reflect.*;
|
||||
@@ -121,7 +122,7 @@ public abstract class GenerateProtobufUtils {
|
||||
for (var protos : xmlProtobuf.getProtos()) {
|
||||
for (var protocol : protos.getProtocols()) {
|
||||
var protocolClass = Class.forName(protocol.getLocation());
|
||||
var protocolId = ProtocolManager.getProtocolIdByClass(protocolClass);
|
||||
var protocolId = ProtocolAnalysis.getProtocolIdByClass(protocolClass);
|
||||
var protocolRegistration = ProtocolManager.getProtocol(protocolId);
|
||||
|
||||
if (allGenerateProtocols.contains(protocolRegistration)) {
|
||||
@@ -188,7 +189,7 @@ public abstract class GenerateProtobufUtils {
|
||||
|
||||
for (var protocol : protos.getProtocols()) {
|
||||
var protocolClass = Class.forName(protocol.getLocation());
|
||||
var protocolId = ProtocolManager.getProtocolIdByClass(protocolClass);
|
||||
var protocolId = ProtocolAnalysis.getProtocolIdByClass(protocolClass);
|
||||
var protocolRegistration = ProtocolManager.getProtocol(protocolId);
|
||||
|
||||
var protocolDocument = GenerateProtocolDocument.getProtocolDocument(protocolId);
|
||||
|
||||
Reference in New Issue
Block a user