You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
5 days ago | |
|---|---|---|
| config | 5 days ago | |
| registry | 2 weeks ago | |
| storage | 2 weeks ago | |
| README.md | 1 week ago | |
| config.yml | 5 days ago | |
| go.mod | 5 days ago | |
| main.go | 5 days ago | |
| makefile | 1 week ago | |
| throttled_conn.go | 5 days ago | |
README.md
Memobus Relay Server
概述
使用 Go 语言编写编写高性能的 TCP 隧道中转服务器。作为中转服务端方案,它负责在 P2P 或局域网直连失败时,安全、高效地代理 App 与设备之间的所有流量,包括 HTTP 请求、WebSocket 长连接和文件流。
架构
本服务采用应用层连接调度架构,作为可水平扩展的无状态节点运行。
- 服务发现: 启动时向 Redis 注册自身信息(公网地址、负载),并定时发送心跳。
- 被动调度: 等待后端调度服务器的指令。调度服务器负责选择最合适的
relay-server节点,并通知设备前来连接。 - 本地转发: 一旦 App 和设备被调度到同一个节点,所有流量都在该节点内存中通过
yamux多路复用隧道进行流量转发。
特性
- 高性能 & 低开销: 基于 Go 和
yamux,为高吞吐量设计。 - 水平扩展: 无状态节点,可通过增加实例来扩展容量。
- 协议支持: 完全支持 HTTP/1.1,并对大文件流和 WebSocket 提供了优化。
- 安全: 连接通过 JWT 进行认证。
- 高可用: 支持优雅停机,并与调度服务器的健康检查机制配合。
部署与运行
依赖
- Go 1.21+
- Redis
配置 (config.yml)
通过 config.yml 文件配置服务。关键配置项如下:
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