1. 简介

go-plugin是基于RPC的Go(golang)插件系统(Go Plugin System over RPC)。这是HashiCorp工具使用超过4年的插件系统。

虽然插件系统是通过RPC进行的,但目前仅设计为在本地[可靠]网络上工作。不支持通过真实网络的插件。

2. 特性

HashiCorp插件系统支持许多功能:

  • 跨语言支持。几乎每种主要语言都可以编写(和使用)插件。该库支持通过gRPC提供插件 。基于gRPC的插件使插件可以用任何语言编写。
  • 双向通讯。因为插件系统支持复杂的参数,所以宿主进程可以向其发送接口实现,并且插件可以回调宿主进程
  • 标准输出/标准错误同步。尽管插件是子进程,但它们可以继续照常使用stdout / stderr,并且输出将镜像回到主机进程。主机进程可以控制io.Writer这些流的流向以防止这种情况的发生。
  • TTY保存。插件子进程与主机进程连接到相同的stdin文件描述符,从而允许需要TTY的软件运行。例如,一个插件可以执行ssh,即使有多个子进程和RPC发生,它对最终用户的外观和行为也非常完美。
    。。。

3. 架构

HashiCorp插件系统通过启动子进程并通过RPC(使用standardnet/rpc或gRPC)进行通信来工作。对于基于gRPC的插件,HTTP2协议处理多路复用。

这种体系结构具有许多优点:

  • 插件不会使您的宿主进程崩溃
  • 插件非常易于编写
  • 插件非常易于安装:只需将二进制文件放在主机可以找到它的位置
  • 相对安全:插件只能访问为其分配的接口和args,而不能访问进程的整个内存空间。此外,go-plugin可以通过TLS与插件通信。

4. go-plugin 插件编写

Writing Plugins Without Go
KV Example

go-plugin入门相关推荐

  1. 从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制

    作者 | 车漾 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 20 讲. 关注"阿里巴巴云原生"公众号,回复关键词**" ...

  2. webpack入门(四)——webpack loader 和plugin

    什么是loader loaders是你用在app源码上的转换元件.他们是用node.js运行的,把源文件作为参数,返回新的资源的函数.  例如,你可以用loaders告诉webpack加载 coffe ...

  3. docker用gpu的参数_从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制

    导读:2016 年,随着 AlphaGo 的走红和 TensorFlow 项目的异军突起,一场名为 AI 的技术革命迅速从学术圈蔓延到了工业界,所谓 AI 革命从此拉开了帷幕.该热潮的背后推手正是云计 ...

  4. Flutter入门:application、module、package、plugin

    我们用AS创建flutter项目时,会看到几个选项:application.module.package.plugin. application 就是一个新flutter app,这个没什么可说的 m ...

  5. Gradle入门(五)——Gradle其它模块与Plugin插件详解

    Gradle其它模块 一.Settings类 settings.gradle(对应Settings.java)决定哪些工程需要被gradle处理,占用了整个gradle生命周期的三分之一,即Initi ...

  6. 2021年大数据Flink(八):Flink入门案例

    目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...

  7. Maven入门指南⑦:Maven的生命周期和插件

    Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...

  8. webkit入门准备

    <webkit入门准备> 1.      C++ a)        Webkit代码风格 b)        Inline c)        Const d)        构造与析构 ...

  9. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  10. chrom扩展开发-入门

    2019独角兽企业重金招聘Python工程师标准>>> 先了解一下chrome的两种功能延伸方式: * 扩展(Extension) 1.指的是通过调用 Chrome 提供的 Chro ...

最新文章

  1. 曼昆《经济学原理》(第五版)习题解答 第三章 相互依存性与贸易的好处
  2. 数据中心或许会成为未来5G最强大的技术支撑
  3. 1、代码中设置编码、编辑器中设置Python的编码
  4. rpm部署mysql_使用rpm快速安装部署MySQL5.6以及主从设置
  5. java string输入_怎么让Java获取用户输入的字符串
  6. Codefroces1077F2. Pictures with Kittens (hard version)
  7. PyCharm配置Docker
  8. OpenFOAM工具详解 - renumberMesh
  9. Cadence如何画PCB封装库
  10. MATLAB R2016a 简单介绍
  11. 行为树(Behavior Tree)详细介绍
  12. java正则表达标点符号_用正则表达式去除标点符号
  13. Electron 安装报错 'Electron failed to install correctly'
  14. 最好用的开源免费笔记软件IdeaNote
  15. 电脑主板资料库 07【转至www.ongood.com.tw】【FreeXploiT收集整理】
  16. 灵活高效PDF转Word工具
  17. 微信小程序 API的 promise化
  18. 该死的ASM IDE
  19. VC++实现的基于人眼状态的疲劳驾驶识别系统
  20. PythonQt——yolov5手势识别隔空操纵车载音乐播放器

热门文章

  1. 交流信号叠加直流偏置_接收无线电信号利器,一款无线有源环形收音机接收天线放大器...
  2. 城市天际线 android,都市天际线安卓手机版
  3. java并发编程之HappenBefore
  4. RAID阵列及常用RAID
  5. mysql jar jdk1.6_搭建非安装版mysql+jdk1.6+tomcat6
  6. ubuntu连不上wifi解决办法
  7. ps图片如何实现渐变
  8. python 描述性分析_描述性分析-1对被解释变量进行描述
  9. 弹出数组第一个元素 php,弹出第一个元素数组以在php codeigniter中插入批处理
  10. python获取命令行参数,使用getopt获取命令行执行时指定的参数