Net Endpoint
Net Endpoint 用于创建和启动网络协议服务器,支持多种协议和数据包处理模式。适用于物联网设备接入、传感器数据收集、网络协议代理等场景。
# Type
endpoint/net
# 核心特性
# 🌐 多协议支持
- TCP/UDP: 标准网络协议
- IPv4/IPv6: 支持 ip4:1, ip6:ipv6-icmp, ip6:58 等
- Unix Socket: unix, unixgram 本地通信
- 扩展协议: Go net 包支持的所有协议类型
# 📦 智能数据包分割
- line: 按行分割(\n 或 \r\n)- 默认模式
- fixed: 固定长度分割
- delimiter: 自定义分隔符(支持十六进制格式)
- length_prefix: 长度前缀模式(支持大小端序、包含/不包含前缀长度)
# 🔄 数据类型处理
默认行为: 所有网络数据默认为 BINARY 类型,确保数据完整性。
类型转换: 通过内置处理器可以改变数据类型:
// 在路由配置中使用处理器
router := impl.NewRouter().From("").
Process("setJsonDataType"). // 设置为 JSON 类型
To("chain:jsonProcessor").End()
1
2
3
4
2
3
4
可用处理器:
setJsonDataType
: 适用于 JSON API 和 REST 服务setTextDataType
: 适用于文本协议(HTTP、SMTP 等)setBinaryDataType
: 明确设置为二进制(默认)
# ⚡ 热更新支持
支持规则链热更新,无需重启服务器即可更新处理逻辑。
# 启动配置
字段 | 类型 | 是否必填 | 说明 | 默认值 |
---|---|---|---|---|
protocol | string | 否 | 网络协议: tcp/udp/unix 等 | tcp |
server | string | 是 | 服务器地址,格式为 host:port,如 ":8888" | - |
readTimeout | int | 否 | 读取超时时间(秒),0 表示无超时 | 60 |
packetMode | string | 否 | 数据包分割模式 | line |
packetSize | int | 否 | 数据包大小(根据模式含义不同) | 0 |
delimiter | string | 否 | 自定义分隔符(支持 0x0A 十六进制格式) | - |
maxPacketSize | int | 否 | 最大数据包大小,防止恶意攻击 | 64KB |
encode | string | 否 | ⚠️ 已弃用:hex/base64 编码,建议在规则链中处理 | - |
# 数据包分割模式详解
# Line 模式(默认)
{
"packetMode": "line"
}
1
2
3
2
3
适用于文本协议,按 \n
或 \r\n
分割消息。
# Fixed 模式
{
"packetMode": "fixed",
"packetSize": 16
}
1
2
3
4
2
3
4
固定长度数据包,适用于二进制协议。
# Delimiter 模式
{
"packetMode": "delimiter",
"delimiter": "0x0D0A"
}
1
2
3
4
2
3
4
自定义分隔符,支持十六进制格式。
# Length Prefix 模式
{
"packetMode": "length_prefix_be",
"packetSize": 2,
"maxPacketSize": 4096
}
1
2
3
4
5
2
3
4
5
长度前缀协议,支持:
length_prefix_le
: 小端序,长度不含前缀length_prefix_be
: 大端序,长度不含前缀length_prefix_le_inc
: 小端序,长度含前缀length_prefix_be_inc
: 大端序,长度含前缀
# 路由配置
# 推荐配置(单路由模式)
// 简单配置
router := impl.NewRouter().From("").To("chain:main").End()
ep.AddRouter(router)
// 带数据类型处理器
router := impl.NewRouter().From("").
Process("setJsonDataType").
To("chain:jsonProcessor").End()
ep.AddRouter(router)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 高级路由配置
// 路由匹配选项
options := &net.RouterMatchOptions{
MatchRawData: true, // 匹配原始数据
DataTypeFilter: "JSON", // 数据类型过滤
MinDataLength: 10, // 最小数据长度
MaxDataLength: 1024, // 最大数据长度
}
router := impl.NewRouter().From("^sensor.*").To("chain:sensor").End()
routerId, err := ep.AddRouter(router, options)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 完整配置示例
# IoT 传感器接入
{
"id": "iot_gateway",
"type": "endpoint/net",
"configuration": {
"protocol": "tcp",
"server": ":8080",
"packetMode": "length_prefix_be",
"packetSize": 2,
"maxPacketSize": 1024,
"readTimeout": 30
},
"routers": [
{
"from": {
"path": ".*",
"processors": ["setBinaryDataType"]
},
"to": {
"path": "chain:iotProcessor"
}
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# JSON API 服务
{
"id": "json_api",
"type": "endpoint/net",
"configuration": {
"protocol": "tcp",
"server": ":9090",
"packetMode": "line",
"readTimeout": 60
},
"routers": [
{
"from": {
"path": ".*",
"processors": ["setJsonDataType"]
},
"to": {
"path": "chain:apiProcessor"
}
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# UDP 广播接收
{
"id": "udp_receiver",
"type": "endpoint/net",
"configuration": {
"protocol": "udp",
"server": ":8888",
"maxPacketSize": 2048
},
"routers": [
{
"from": {
"path": ".*",
"processors": ["setTextDataType"]
},
"to": {
"path": "chain:udpProcessor"
}
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 热更新示例
// 初始 DSL 配置
initialDSL := `{
"ruleChain": {
"id": "iotProcessor",
"root": true
},
"metadata": {
"endpoints": [...],
"nodes": [...]
}
}`
// 启动规则引擎
ruleEngine, _ := rulego.New("iotProcessor", []byte(initialDSL))
// 热更新配置
updatedDSL := `{...}` // 新的配置
err := ruleEngine.ReloadSelf([]byte(updatedDSL))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 应用场景
# 🏭 工业物联网
- 传感器数据收集
- PLC 设备通信
- Modbus TCP 代理
# 🌐 网络服务
- TCP/UDP 代理
- 协议转换网关
- 实时数据推送
# 📡 设备接入
- MQTT 网关
- 设备注册服务
- 心跳监控
# 最佳实践
数据类型选择
- 物联网传感器:保持 BINARY 类型
- JSON API:使用
setJsonDataType
处理器 - 文本协议:使用
setTextDataType
处理器
路由设计
- 推荐单一默认路由,在规则链中处理复杂逻辑
- 避免过多正则表达式路由
性能优化
- 合理设置
maxPacketSize
防止恶意攻击 - 适当配置
readTimeout
避免连接占用
- 合理设置
安全考虑
- 在生产环境中限制服务器绑定地址
- 使用防火墙限制访问来源
# 示例代码
参考完整示例:
在 GitHub 上编辑此页 (opens new window)
上次更新: 2025/07/01, 10:33:52