RuleGo RuleGo
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • RuleGo-MCP-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文

广告采用随机轮播方式显示 ❤️成为赞助商
  • Endpoint概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件

    • Rest Endpoint
    • Websocket Endpoint
    • MQTT Endpoint
    • Schedule Endpoint
    • Net Endpoint
      • Type
      • 核心特性
        • 🌐 多协议支持
        • 📦 智能数据包分割
        • 🔄 数据类型处理
        • ⚡ 热更新支持
      • 启动配置
      • 数据包分割模式详解
        • Line 模式(默认)
        • Fixed 模式
        • Delimiter 模式
        • Length Prefix 模式
      • 路由配置
        • 推荐配置(单路由模式)
        • 高级路由配置
      • 完整配置示例
        • IoT 传感器接入
        • JSON API 服务
        • UDP 广播接收
      • 热更新示例
      • 应用场景
        • 🏭 工业物联网
        • 🌐 网络服务
        • 📡 设备接入
      • 最佳实践
      • 示例代码
    • Kafka Endpoint
    • Nats Endpoint
    • Redis Sub Endpoint
    • Redis Steam Endpoint
    • Rabbitmq Endpoint
    • MYSQL CDC Endpoint
    • OPC_UA Endpoint
    • GRPC Stream Endpoint
    • Beanstalkd Endpoint
    • Wukongim Endpoint
    • 扩展Endpoint
目录

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

可用处理器:

  • 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

适用于文本协议,按 \n 或 \r\n 分割消息。

# Fixed 模式

{
  "packetMode": "fixed",
  "packetSize": 16
}
1
2
3
4

固定长度数据包,适用于二进制协议。

# Delimiter 模式

{
  "packetMode": "delimiter",
  "delimiter": "0x0D0A"
}
1
2
3
4

自定义分隔符,支持十六进制格式。

# Length Prefix 模式

{
  "packetMode": "length_prefix_be",
  "packetSize": 2,
  "maxPacketSize": 4096
}
1
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

# 高级路由配置

// 路由匹配选项
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

# 完整配置示例

# 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

# 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

# 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

# 热更新示例

// 初始 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

# 应用场景

# 🏭 工业物联网

  • 传感器数据收集
  • PLC 设备通信
  • Modbus TCP 代理

# 🌐 网络服务

  • TCP/UDP 代理
  • 协议转换网关
  • 实时数据推送

# 📡 设备接入

  • MQTT 网关
  • 设备注册服务
  • 心跳监控

# 最佳实践

  1. 数据类型选择

    • 物联网传感器:保持 BINARY 类型
    • JSON API:使用 setJsonDataType 处理器
    • 文本协议:使用 setTextDataType 处理器
  2. 路由设计

    • 推荐单一默认路由,在规则链中处理复杂逻辑
    • 避免过多正则表达式路由
  3. 性能优化

    • 合理设置 maxPacketSize 防止恶意攻击
    • 适当配置 readTimeout 避免连接占用
  4. 安全考虑

    • 在生产环境中限制服务器绑定地址
    • 使用防火墙限制访问来源

# 示例代码

参考完整示例:

  • Net Endpoint 基础用法 (opens new window)
  • 固定长度协议处理 (opens new window)
  • 热更新演示 (opens new window)
在 GitHub 上编辑此页 (opens new window)
上次更新: 2025/07/01, 10:33:52
Schedule Endpoint
Kafka Endpoint

← Schedule Endpoint Kafka Endpoint→

Theme by Vdoing | Copyright © 2023-2025 RuleGo Team | Apache 2.0 License

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式