perf[protocol]: 优化net和protocol的代码结构

This commit is contained in:
jaysunxiao
2021-06-24 01:33:22 +08:00
parent d7d707992c
commit bcefc2ab4f
5 changed files with 31 additions and 29 deletions
@@ -16,9 +16,8 @@ package com.zfoo.net.handler.codec.tcp;
import com.zfoo.net.NetContext;
import com.zfoo.net.packet.model.DecodedPacketInfo;
import com.zfoo.net.packet.model.EncodedPacketInfo;
import com.zfoo.net.packet.service.PacketService;
import com.zfoo.net.util.SessionUtils;
import com.zfoo.protocol.ProtocolManager;
import com.zfoo.protocol.util.IOUtils;
import com.zfoo.protocol.util.StringUtils;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
@@ -28,7 +27,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Objects;
/**
* header(4byte) + protocolId(2byte) + packet
@@ -44,7 +42,7 @@ public class TcpPacketCodecHandler extends ByteToMessageCodec<EncodedPacketInfo>
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
// 不够读一个int
if (in.readableBytes() <= ProtocolManager.PROTOCOL_HEAD_LENGTH) {
if (in.readableBytes() <= PacketService.PACKET_HEAD_LENGTH) {
return;
}
in.markReaderIndex();
@@ -17,9 +17,8 @@ import com.zfoo.net.NetContext;
import com.zfoo.net.handler.codec.tcp.TcpPacketCodecHandler;
import com.zfoo.net.packet.model.DecodedPacketInfo;
import com.zfoo.net.packet.model.EncodedPacketInfo;
import com.zfoo.net.packet.service.PacketService;
import com.zfoo.net.util.SessionUtils;
import com.zfoo.protocol.ProtocolManager;
import com.zfoo.protocol.util.IOUtils;
import com.zfoo.protocol.util.JsonUtils;
import com.zfoo.protocol.util.StringUtils;
import io.netty.buffer.ByteBuf;
@@ -33,7 +32,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Objects;
/**
* header(4byte) + protocolId(2byte) + packet
@@ -51,7 +49,7 @@ public class WebSocketCodecHandler extends MessageToMessageCodec<WebSocketFrame,
ByteBuf in = webSocketFrame.content();
// 不够读一个int
if (in.readableBytes() <= ProtocolManager.PROTOCOL_HEAD_LENGTH) {
if (in.readableBytes() <= PacketService.PACKET_HEAD_LENGTH) {
return;
}
@@ -41,6 +41,11 @@ public class PacketService implements IPacketService {
private static final Logger logger = LoggerFactory.getLogger(PacketService.class);
/**
* 包体的头部的长度,一个int字节长度
*/
public static final int PACKET_HEAD_LENGTH = 4;
/**
* 网络包的约定规则如下:
* 1. 客户端的请求约定以Request结尾,服务器的响应约定以Response结尾
@@ -124,7 +129,7 @@ public class PacketService implements IPacketService {
buffer.clear();
// 预留写入包的长度,一个int字节大小
buffer.writeInt(ProtocolManager.PROTOCOL_HEAD_LENGTH);
buffer.writeInt(PACKET_HEAD_LENGTH);
// 写入包packet
ProtocolManager.write(buffer, packet);
@@ -140,7 +145,7 @@ public class PacketService implements IPacketService {
int length = buffer.readableBytes();
int packetLength = length - ProtocolManager.PROTOCOL_HEAD_LENGTH;
int packetLength = length - PACKET_HEAD_LENGTH;
buffer.writerIndex(0);
@@ -18,7 +18,7 @@ import com.zfoo.net.packet.*;
import com.zfoo.net.packet.model.DecodedPacketInfo;
import com.zfoo.net.packet.model.SignalPacketAttachment;
import com.zfoo.net.packet.service.IPacketService;
import com.zfoo.protocol.ProtocolManager;
import com.zfoo.net.packet.service.PacketService;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.junit.Assert;
@@ -76,7 +76,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.directBuffer();
packetService.write(writeBuff, cm, attachment);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -93,7 +93,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.buffer();
packetService.write(writeBuff, cm, null);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -112,7 +112,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.buffer();
packetService.write(writeBuff, cm, null);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -131,7 +131,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.buffer();
packetService.write(writeBuff, cm, null);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -166,7 +166,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.buffer();
packetService.write(writeBuff, cm, null);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -196,7 +196,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.buffer();
packetService.write(writeBuff, cm, null);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -215,7 +215,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.buffer();
packetService.write(writeBuff, cm, null);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -243,7 +243,7 @@ public class ProtocolTest {
ByteBuf writeBuff = Unpooled.buffer();
packetService.write(writeBuff, cm, null);
writeBuff.readerIndex(ProtocolManager.PROTOCOL_HEAD_LENGTH);// 信息头的长度
writeBuff.readerIndex(PacketService.PACKET_HEAD_LENGTH);// 信息头的长度
DecodedPacketInfo packetInfo = packetService.read(writeBuff);
@@ -15,13 +15,18 @@ package com.zfoo.protocol;
import com.zfoo.protocol.buffer.ByteBufUtils;
import com.zfoo.protocol.exception.RunException;
import com.zfoo.protocol.generate.GenerateOperation;
import com.zfoo.protocol.registration.*;
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.xml.XmlProtocols;
import io.netty.buffer.ByteBuf;
import java.lang.reflect.*;
import java.util.*;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
import java.util.Set;
/**
* @author jaysunxiao
@@ -29,10 +34,6 @@ import java.util.*;
*/
public class ProtocolManager {
/**
* 包体的头部的长度,一个int字节长度
*/
public static final int PROTOCOL_HEAD_LENGTH = 4;
public static final String PROTOCOL_ID = "PROTOCOL_ID";
public static final short MAX_PROTOCOL_NUM = Short.MAX_VALUE;
public static final byte MAX_MODULE_NUM = Byte.MAX_VALUE;
@@ -41,12 +42,14 @@ public class ProtocolManager {
public static final IProtocolRegistration[] protocols = new IProtocolRegistration[MAX_PROTOCOL_NUM];
public static final ProtocolModule[] modules = new ProtocolModule[MAX_MODULE_NUM];
static {
// 初始化默认协议模块
modules[0] = ProtocolModule.DEFAULT_PROTOCOL_MODULE;
}
/**
* 将packet序列化到buffer中
*/
public static void write(ByteBuf buffer, IPacket packet) {
var protocolId = packet.protocolId();
// 写入协议号
@@ -88,7 +91,6 @@ public class ProtocolManager {
return moduleOptional.get();
}
public static synchronized void initProtocol(Set<Class<?>> protocolClassSet) {
ProtocolAnalysis.analyze(protocolClassSet);
}
@@ -97,7 +99,6 @@ public class ProtocolManager {
ProtocolAnalysis.analyze(protocolClassSet, generateOperation);
}
public static synchronized void initProtocol(XmlProtocols xmlProtocols, GenerateOperation generateOperation) {
ProtocolAnalysis.analyze(xmlProtocols, generateOperation);
}