Concepts

不重启主进程,可动态加载运行的子模块或代码块。

实现对网元等模块实现插件式的动态数据转换,编辑数据转换逻辑不再需要更新、重启服务端代码。

方案 动态加载 无需编译 原生支持 交互难度 集成难度
plugin 原生接口 一般
hashicorp/plugin GRPC
wasm 手动操作内存 一般
lua 可共享 struct
javascript JSON

Plugin

Pros & Const

优点:

  1. Go 代码,没有学习成本
  2. 原生支持

缺点:

  1. 需要编译,集成的时候需要多写点代码
  2. 发布时需要多集成一个 Go 可执行文件,会多 100 MB 左右

Usage

Golang 实现动态加载:

  1. 首先写个 package main,里面定义任何公开函数
  2. go build -buildmode=plugin 打包成 so 文件
  3. 主程序里通过 plugin.Open 加载这个 so 文件