diff --git a/README.md b/README.md
index 8ca3934ba07cb8a211de75c79636605c7ebd1c9f..a85828554279d3ae0a45064e079e1cf25ed5505d 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,7 @@
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/30dad82f79f34e41bafbc3cef6b68fc3)](https://www.codacy.com/gh/lets-mica/mica-mqtt/dashboard?utm_source=github.com&utm_medium=referral&utm_content=lets-mica/mica-mqtt&utm_campaign=Badge_Grade)
[![GitHub](https://img.shields.io/github/license/lets-mica/mica-mqtt.svg?style=flat-square)](https://github.com/lets-mica/mica-mqtt/blob/master/LICENSE)
-基于 `t-io` 实现的 `mqtt` 物联网组件。
-
-## 使用
-目前仅仅是试验性质,不过 `t-io` 确实很稳,`mica-mqtt-example` 中有 `mqtt` 服务端和客户端测试代码, `main` 方法运行即可。
+基于 `t-io` 实现的**低延迟**、**高性能**的 `mqtt` 物联网组件。
## 功能
- [x] 支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。
@@ -16,9 +13,11 @@
- [ ] MQTT 服务端接续完善,精力有限,周期可能会长一些。
## 文档
+- [t-io 官方问](https://www.tiocloud.com/doc/tio/85)
- [mqtt 协议文档](https://github.com/mcxiaoke/mqtt)
## 快速开始
+查看 `mica-mqtt-example` 中有 `mqtt` 服务端和客户端演示代码, `main` 方法运行即可。
### 1. 启动 Server 端
diff --git a/docs/graalvm.md b/docs/graalvm.md
new file mode 100644
index 0000000000000000000000000000000000000000..612dcdf5cd2055072bddc52ce2c2220df4f65ad1
--- /dev/null
+++ b/docs/graalvm.md
@@ -0,0 +1,2 @@
+# mica-mqtt 之 GraalVM native-image 编译成本机可执行程序
+
diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/session/IMqttSession.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/session/IMqttSession.java
new file mode 100644
index 0000000000000000000000000000000000000000..87eef07afaa6b53afda96542c9c76e286b302b33
--- /dev/null
+++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/session/IMqttSession.java
@@ -0,0 +1,9 @@
+package net.dreamlu.iot.mqtt.core.server.session;
+
+/**
+ * mqtt session
+ *
+ * @author L.cm
+ */
+public interface IMqttSession {
+}
diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/util/MqttTopicUtil.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/util/MqttTopicUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..a63627af550cd73b2a81429fa3b208ef0e432857
--- /dev/null
+++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/util/MqttTopicUtil.java
@@ -0,0 +1,21 @@
+package net.dreamlu.iot.mqtt.core.util;
+
+/**
+ * Mqtt Topic 工具
+ *
+ * @author L.cm
+ */
+public final class MqttTopicUtil {
+
+ public static String regexTopic(String topic) {
+ if (topic.startsWith("$")) {
+ topic = "\\" + topic;
+ }
+ return topic
+ .replaceAll("/", "\\\\/")
+ .replaceAll("\\+", "[^/]+")
+ .replaceAll("#", "(.+)") + "$";
+ }
+
+
+}
diff --git a/mica-mqtt-example/graalvm/reflect-config.json b/mica-mqtt-example/graalvm/reflect-config.json
index 3e6950f67bfb182080bf8632b69f101b4cf50f2f..dda3fb5b334adb71db05c596c118cc60cf7d5033 100644
--- a/mica-mqtt-example/graalvm/reflect-config.json
+++ b/mica-mqtt-example/graalvm/reflect-config.json
@@ -26,9 +26,5 @@
{
"name": "com.github.benmanes.caffeine.cache.PSAMS",
"allDeclaredConstructors": true
- },
- {
- "name": "org.tio.utils.caffeine.CaffeineUtils",
- "allDeclaredConstructors": true
}
]
diff --git a/mica-mqtt-example/graalvm/resource-config.json b/mica-mqtt-example/graalvm/resource-config.json
new file mode 100644
index 0000000000000000000000000000000000000000..140dc008320e181ebf1f3ae4f3976b62f883bf39
--- /dev/null
+++ b/mica-mqtt-example/graalvm/resource-config.json
@@ -0,0 +1,9 @@
+{
+ "resources": {
+ "includes": [
+ {
+ "pattern": "^logging.properties"
+ }
+ ]
+ }
+}
diff --git a/mica-mqtt-example/pom.xml b/mica-mqtt-example/pom.xml
index 50697c1737b7c5fa7dc4dbcbb1c3bda9d0466d60..a11dc9d4d66a72ac2b8441744a39d63c6976fe78 100644
--- a/mica-mqtt-example/pom.xml
+++ b/mica-mqtt-example/pom.xml
@@ -116,7 +116,12 @@
mqtt-server-graalvm
${mainClass.server}
- --enable-all-security-services --report-unsupported-elements-at-runtime -H:+RemoveSaturatedTypeFlows --allow-incomplete-classpath -H:ReflectionConfigurationFiles=../graalvm/reflect-config.json
+ --enable-all-security-services
+ --report-unsupported-elements-at-runtime
+ -H:+RemoveSaturatedTypeFlows
+ --allow-incomplete-classpath
+ -H:ReflectionConfigurationFiles=../graalvm/reflect-config.json
+ -H:IncludeResources=../graalvm/resource-config.json
@@ -160,7 +165,12 @@
mqtt-client-graalvm
${mainClass.client}
- --enable-all-security-services --report-unsupported-elements-at-runtime -H:+RemoveSaturatedTypeFlows --allow-incomplete-classpath -H:ReflectionConfigurationFiles=../graalvm/reflect-config.json
+ --enable-all-security-services
+ --report-unsupported-elements-at-runtime
+ -H:+RemoveSaturatedTypeFlows
+ --allow-incomplete-classpath
+ -H:ReflectionConfigurationFiles=../graalvm/reflect-config.json
+ -H:IncludeResources=../graalvm/resource-config.json
diff --git a/mica-mqtt-example/src/main/resources/logging.properties b/mica-mqtt-example/src/main/resources/logging.properties
index b5665acb237608b2cc11e5ee91186e4d52e01292..4e9e895ad86844ba2bd7c9863c8e92a4a196eeb3 100644
--- a/mica-mqtt-example/src/main/resources/logging.properties
+++ b/mica-mqtt-example/src/main/resources/logging.properties
@@ -1,4 +1,5 @@
handlers=java.util.logging.ConsoleHandler
.level=INFO
+com.github.benmanes.caffeine.cache.level=SEVERE
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter