Replies: 2 comments 4 replies
-
最后要developer自己compile,是的,但是并不是需要两个exe。 本质上插件部分和运行bot的部分是分离的,我们可以看一眼脚手架中 func main() {
// 使用默认的日志格式配置
DDBOT.SetUpLog()
// 启动bot,会自动阻塞
DDBOT.Run()
} 而实现是: Line 55 in d03e748 anyway总会需要一个entrypoint去编译,脚手架只是为了方便测试而带上了这一部分,如果想要再引用其他开发者的插件,只是需要import 一下,重新编译即可,并非需要编译两个仓库内的
关于动态库形式的插件我在初期也做过一些尝试,考虑过官方的go plugin和hashicorp/go-plugin,由于他们的一些特性(绑定go版本的传染性,以及本地rpc的端口占用)我认为并不适合ddbot。 而当前的ddbot已经不能方便地使用动态库形式的插件,因为ddbot使用的数据库是 buntdb,它并不带有网络协议(即不支持多客户端访问),也不支持文件锁(即不支持多进程访问)。 所以当你在尝试动态库形式的插件方案的时候,也请注意插件内访问数据库的问题(你会选择更换新的数据库吗?)。 |
Beta Was this translation helpful? Give feedback.
-
@Sora233 問一下,我可以直接透過PR遞交來新增訂閱源嗎? 插件化管理先放一邊,目前的這種方式對開發者來說確實算方便 所以我目前比較希望透過遞交PR來新增訂閱源 |
Beta Was this translation helpful? Give feedback.
-
目前編寫插件需要透過腳手架,也就是最後依然要 developer 自己 compile 成 exe。 假設一個用戶想同時擁有安裝兩個訂閱插件,但兩個 訂閱插件分別來自不同的 開發者,那麼可能會出現同時使用兩個exe的情況? 又或者需要從源碼提取這兩個訂閱插件,然後放到新建的腳手架再進行 compile, 個人認為對於用戶來說不太方便。
而透過 go-bind-plugin,它能透過動態載入
.so
文件實時加載libraries,即可以在 .exe (executable) 形態的時候在 runtime 加載插件。理想架構是這樣
...
以上目前只是一個理想方案,尚未進行過任何的測試,所以不知具體效果會如何。如果你沒有太多時間,我是打算有空的時候嘗試研究修改並遞交 PR,不過如果你不考慮這個方案,那我就不花時間研究了
Beta Was this translation helpful? Give feedback.
All reactions