mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-05-19 21:26:08 +00:00
Merge pull request #80 from a610569731/main
perf[protocol ]:Protocol auto List by order
This commit is contained in:
@@ -139,8 +139,8 @@ public class ProtocolManager {
|
||||
* EN:Register protocol and automatically generates a protocol ID if the subprotocol does not specify a protocol ID
|
||||
* CN:子协议会自动注册协议号protocolId,如果子协议没有指定protocolId则自动生成protocolId
|
||||
*/
|
||||
public static void initProtocolAuto(Set<Class<?>> protocolClassSet, GenerateOperation generateOperation) {
|
||||
ProtocolAnalysis.analyzeAuto(protocolClassSet, generateOperation);
|
||||
public static void initProtocolAuto(List<Class<?>> protocolClassList, GenerateOperation generateOperation) {
|
||||
ProtocolAnalysis.analyzeAuto(protocolClassList, generateOperation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.zfoo.protocol.anno.Compatible;
|
||||
import com.zfoo.protocol.anno.Protocol;
|
||||
import com.zfoo.protocol.collection.ArrayUtils;
|
||||
import com.zfoo.protocol.collection.CollectionUtils;
|
||||
import com.zfoo.protocol.exception.AssertException;
|
||||
import com.zfoo.protocol.exception.RunException;
|
||||
import com.zfoo.protocol.exception.UnknownException;
|
||||
import com.zfoo.protocol.generate.GenerateOperation;
|
||||
@@ -126,17 +127,33 @@ public class ProtocolAnalysis {
|
||||
enhance(generateOperation, enhanceList);
|
||||
}
|
||||
|
||||
public static synchronized void analyzeAuto(Set<Class<?>> protocolClassSet, GenerateOperation generateOperation) {
|
||||
public static synchronized void analyzeAuto(List<Class<?>> protocolClassList, GenerateOperation generateOperation) {
|
||||
AssertionUtils.notNull(subProtocolIdMap, "[{}] initialization has already been completed, please do not repeat the initialization", ProtocolManager.class.getSimpleName());
|
||||
// 获取所有协议类
|
||||
var relevantClassSet = new HashSet<>(protocolClassSet);
|
||||
for (var clazz : protocolClassSet) {
|
||||
relevantClassSet.addAll(ClassUtils.relevantClass(clazz));
|
||||
LinkedHashSet<Class> tempProtocolClassSet = new LinkedHashSet<>(protocolClassList);
|
||||
//去重
|
||||
protocolClassList = new ArrayList<>();
|
||||
for(Class clazz : tempProtocolClassSet){
|
||||
protocolClassList.add(clazz);
|
||||
}
|
||||
|
||||
var relevantClassList = relevantClassSet.stream()
|
||||
Set<Class> relevantClassList = new LinkedHashSet<>(protocolClassList);
|
||||
for (var clazz : protocolClassList) {
|
||||
Set<Class<?>> classSet = ClassUtils.relevantClass(clazz);
|
||||
for(Class cls :classSet){
|
||||
if( !relevantClassList.contains(cls)){
|
||||
int protocolId = getProtocolIdAndCheckClass(cls);
|
||||
if(protocolId >= 0){
|
||||
relevantClassList.add(cls);
|
||||
}else{
|
||||
throw new AssertException("[class:{}]类型必须声明", cls.getCanonicalName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//var relevantClassList = relevantClassSet;
|
||||
/* var relevantClassList = relevantClassSet.stream()
|
||||
.sorted((a, b) -> a.getCanonicalName().compareTo(b.getCanonicalName()))
|
||||
.toList();
|
||||
.toList();*/
|
||||
|
||||
// 检查协议类是否合法
|
||||
var noProtocolIds = new ArrayList<Class<?>>();
|
||||
@@ -157,7 +174,7 @@ public class ProtocolAnalysis {
|
||||
}
|
||||
|
||||
// 协议id和协议信息对应起来
|
||||
for (var protocolClass : relevantClassSet) {
|
||||
for (Class protocolClass : relevantClassList) {
|
||||
var registration = parseProtocolRegistration(protocolClass, ProtocolModule.DEFAULT_PROTOCOL_MODULE);
|
||||
protocols[registration.protocolId()] = registration;
|
||||
}
|
||||
|
||||
@@ -357,7 +357,7 @@ public class BenchmarkTesting {
|
||||
|
||||
static {
|
||||
// zfoo协议注册(其实就是:将Set里面的协议号和对应的类注册好,这样子就可以根据协议号知道是反序列化为哪个类)
|
||||
ProtocolManager.initProtocolAuto(Set.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), GenerateOperation.NO_OPERATION);
|
||||
ProtocolManager.initProtocolAuto(List.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), GenerateOperation.NO_OPERATION);
|
||||
|
||||
for (int i = 0; i < executors.length; i++) {
|
||||
executors[i] = Executors.newSingleThreadExecutor();
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.junit.Test;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.zfoo.protocol.BenchmarkTesting.complexObject;
|
||||
@@ -44,7 +45,7 @@ public class CompatibleTesting {
|
||||
*/
|
||||
@Test
|
||||
public void compatibleTest() throws IOException {
|
||||
ProtocolManager.initProtocolAuto(Set.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), GenerateOperation.NO_OPERATION);
|
||||
ProtocolManager.initProtocolAuto(List.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), GenerateOperation.NO_OPERATION);
|
||||
|
||||
var bytes = IOUtils.toByteArray(ClassUtils.getFileFromClassPath("ComplexObject.bytes"));
|
||||
var buffer = new UnpooledHeapByteBuf(ByteBufAllocator.DEFAULT, 100, 1_0000);
|
||||
@@ -128,7 +129,7 @@ public class CompatibleTesting {
|
||||
|
||||
@Test
|
||||
public void normalReadTest() throws IOException {
|
||||
ProtocolManager.initProtocolAuto(Set.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), GenerateOperation.NO_OPERATION);
|
||||
ProtocolManager.initProtocolAuto(List.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), GenerateOperation.NO_OPERATION);
|
||||
|
||||
// var bytes = IOUtils.toByteArray(ClassUtils.getFileFromClassPath("compatible/normal-no-compatible.bytes"));
|
||||
// var bytes = IOUtils.toByteArray(ClassUtils.getFileFromClassPath("compatible/normal-out-compatible.bytes"));
|
||||
|
||||
@@ -728,7 +728,7 @@ public class FieldSpeedTesting {
|
||||
System.setProperty("io.netty.buffer.checkAccessible", "false");
|
||||
System.setProperty("io.netty.buffer.checkBounds", "false");
|
||||
var op = GenerateOperation.NO_OPERATION;
|
||||
ProtocolManager.initProtocolAuto(Set.of(IntObject.class, IntegerObject.class, FloatObject.class, BytesObject.class, StringObject.class, ListIntegerObject.class, SetObject.class, MapObject.class, InnerObjectObject.class), op);
|
||||
ProtocolManager.initProtocolAuto(List.of(IntObject.class, IntegerObject.class, FloatObject.class, BytesObject.class, StringObject.class, ListIntegerObject.class, SetObject.class, MapObject.class, InnerObjectObject.class), op);
|
||||
}
|
||||
|
||||
public static final ThreadLocal<Kryo> kryos = new ThreadLocal<>() {
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.zfoo.protocol.serializer.CodeLanguage;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -44,7 +45,7 @@ public class GenerateTesting {
|
||||
generateLanguages.add(CodeLanguage.Python);
|
||||
|
||||
// Initialize and then generate the protocol
|
||||
ProtocolManager.initProtocolAuto(Set.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), op);
|
||||
ProtocolManager.initProtocolAuto(List.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), op);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ import org.junit.Test;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -94,7 +95,7 @@ public class ExportBinaryTesting {
|
||||
storageManager.initAfter();
|
||||
|
||||
// 生成协议
|
||||
var protocols = new HashSet<Class<?>>();
|
||||
List protocols = new ArrayList<>();
|
||||
protocols.add(ResourceData.class);
|
||||
protocols.addAll(storageManager.storageMap().keySet());
|
||||
var operation = new GenerateOperation();
|
||||
|
||||
Reference in New Issue
Block a user