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