From 859abdc0e7911f53987c3bba3b743d89f0cd1f99 Mon Sep 17 00:00:00 2001 From: lin_hl Date: Fri, 24 Oct 2025 11:22:29 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0readme=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ config.yml | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8df936b --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# Memobus Relay Server + +## 概述 + +使用 Go 语言编写编写高性能的 TCP 隧道中转服务器。作为中转服务端方案,它负责在 P2P 或局域网直连失败时,安全、高效地代理 App 与设备之间的所有流量,包括 HTTP 请求、WebSocket 长连接和文件流。 + +## 架构 + +本服务采用**应用层连接调度**架构,作为可水平扩展的无状态节点运行。 + +1. **服务发现**: 启动时向 Redis 注册自身信息(公网地址、负载),并定时发送心跳。 +2. **被动调度**: 等待后端**调度服务器**的指令。调度服务器负责选择最合适的 `relay-server` 节点,并通知设备前来连接。 +3. **本地转发**: 一旦 App 和设备被调度到同一个节点,所有流量都在该节点内存中通过 `yamux` 多路复用隧道进行流量转发。 + +## 特性 + +* **高性能 & 低开销**: 基于 Go 和 `yamux`,为高吞吐量设计。 +* **水平扩展**: 无状态节点,可通过增加实例来扩展容量。 +* **协议支持**: 完全支持 HTTP/1.1,并对大文件流和 WebSocket 提供了优化。 +* **安全**: 连接通过 JWT 进行认证。 +* **高可用**: 支持优雅停机,并与调度服务器的健康检查机制配合。 + +## 部署与运行 + +### 依赖 + +* Go 1.21+ +* Redis + +### 配置 (`config.yml`) + +通过 `config.yml` 文件配置服务。关键配置项如下: + +```yaml +server: + app_listen_addr: ":8089" + device_listen_addr: ":7002" + public_app_addr: "YOUR_PUBLIC_IP:8089" # App 访问的公网地址 + public_device_addr: "YOUR_PUBLIC_IP:7002" # 设备访问的公网地址 + instance_id: "" # 实例ID (留空自动生成) + +auth: + app_access_secret: "your-app-secret" + device_relay_secret: "your-device-secret" + +redis: + enabled: true + addr: "redis.internal:6379" + instance_registry_key: "relay_instances" # 服务注册用的 Redis Key + device_relay_mapping_key: "device_relay_mapping" # 设备-实例映射用的 Redis Key + heartbeat_interval_seconds: 15 \ No newline at end of file diff --git a/config.yml b/config.yml index b550c96..25ed05a 100644 --- a/config.yml +++ b/config.yml @@ -18,7 +18,7 @@ redis: enabled: true addr: "118.178.183.78:6379" password: "" - db: 1 + db: 0 # [新增] 服务发现相关的 Key 和 TTL # 使用 Redis Hash: Key 是 instance_registry_key, Field 是 instance_id, Value 是实例信息的 JSON