提交 20742180 编写于 作者: 如梦技术's avatar 如梦技术 🐛

优化 mica-mqtt-model 减少序列化长度

上级 7b57c9c7
...@@ -38,6 +38,10 @@ public enum DefaultMessageSerializer implements IMessageSerializer { ...@@ -38,6 +38,10 @@ public enum DefaultMessageSerializer implements IMessageSerializer {
* 空 byte 数组 * 空 byte 数组
*/ */
private static final byte[] EMPTY_BYTES = new byte[0]; private static final byte[] EMPTY_BYTES = new byte[0];
/**
* 空 short byte 数组,2 个长度
*/
private static final byte[] EMPTY_SHORT_BYTES = new byte[2];
/** /**
* 空 int byte 数组,4 个长度 * 空 int byte 数组,4 个长度
*/ */
...@@ -52,8 +56,8 @@ public enum DefaultMessageSerializer implements IMessageSerializer { ...@@ -52,8 +56,8 @@ public enum DefaultMessageSerializer implements IMessageSerializer {
if (message == null) { if (message == null) {
return EMPTY_BYTES; return EMPTY_BYTES;
} }
// 4 + 4 + 4 * 5 + 1 + 4 + 4 + 8 + 8 // 4 + 2 + 4 * 5 + 1 + 4 + 4 + 8 + 8
int protocolLength = 53; int protocolLength = 51;
String fromClientId = message.getFromClientId(); String fromClientId = message.getFromClientId();
// 消息来源 客户端 id // 消息来源 客户端 id
byte[] fromClientIdBytes = null; byte[] fromClientIdBytes = null;
...@@ -122,9 +126,9 @@ public enum DefaultMessageSerializer implements IMessageSerializer { ...@@ -122,9 +126,9 @@ public enum DefaultMessageSerializer implements IMessageSerializer {
// MQTT 消息 ID // MQTT 消息 ID
Integer messageId = message.getId(); Integer messageId = message.getId();
if (messageId != null) { if (messageId != null) {
buffer.putInt(messageId); buffer.putShort(messageId.shortValue());
} else { } else {
buffer.put(EMPTY_INT_BYTES); buffer.put(EMPTY_SHORT_BYTES);
} }
// 消息来源 客户端 id // 消息来源 客户端 id
if (fromClientIdBytes != null) { if (fromClientIdBytes != null) {
...@@ -214,7 +218,7 @@ public enum DefaultMessageSerializer implements IMessageSerializer { ...@@ -214,7 +218,7 @@ public enum DefaultMessageSerializer implements IMessageSerializer {
message.setNode(new String(nodeBytes, StandardCharsets.UTF_8)); message.setNode(new String(nodeBytes, StandardCharsets.UTF_8));
} }
// MQTT 消息 ID // MQTT 消息 ID
int messageId = buffer.getInt(); int messageId = getMessageId(buffer);
if (messageId > 0) { if (messageId > 0) {
message.setId(messageId); message.setId(messageId);
} }
...@@ -302,4 +306,19 @@ public enum DefaultMessageSerializer implements IMessageSerializer { ...@@ -302,4 +306,19 @@ public enum DefaultMessageSerializer implements IMessageSerializer {
return (short) (buffer.get() & 0xFF); return (short) (buffer.get() & 0xFF);
} }
/**
* MessageId numberOfBytesConsumed = 2. return decoded result.
*/
private static int getMessageId(ByteBuffer buffer) {
int min = 0;
int max = 65535;
short msbSize = readUnsignedByte(buffer);
short lsbSize = readUnsignedByte(buffer);
int result = msbSize << 8 | lsbSize;
if (result < min || result > max) {
result = -1;
}
return result;
}
} }
...@@ -33,7 +33,7 @@ public class DefaultMessageSerializerTest { ...@@ -33,7 +33,7 @@ public class DefaultMessageSerializerTest {
@Test @Test
public void test() { public void test() {
Message message = new Message(); Message message = new Message();
message.setId(null); message.setId(0xffff);
message.setFromClientId("123"); message.setFromClientId("123");
message.setFromUsername("name"); message.setFromUsername("name");
message.setClientId("123"); message.setClientId("123");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册