go-plugin入门
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入门相关推荐
- 从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制
作者 | 车漾 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 20 讲. 关注"阿里巴巴云原生"公众号,回复关键词**" ...
- webpack入门(四)——webpack loader 和plugin
什么是loader loaders是你用在app源码上的转换元件.他们是用node.js运行的,把源文件作为参数,返回新的资源的函数. 例如,你可以用loaders告诉webpack加载 coffe ...
- docker用gpu的参数_从零开始入门 K8s | GPU 管理和 Device Plugin 工作机制
导读:2016 年,随着 AlphaGo 的走红和 TensorFlow 项目的异军突起,一场名为 AI 的技术革命迅速从学术圈蔓延到了工业界,所谓 AI 革命从此拉开了帷幕.该热潮的背后推手正是云计 ...
- Flutter入门:application、module、package、plugin
我们用AS创建flutter项目时,会看到几个选项:application.module.package.plugin. application 就是一个新flutter app,这个没什么可说的 m ...
- Gradle入门(五)——Gradle其它模块与Plugin插件详解
Gradle其它模块 一.Settings类 settings.gradle(对应Settings.java)决定哪些工程需要被gradle处理,占用了整个gradle生命周期的三分之一,即Initi ...
- 2021年大数据Flink(八):Flink入门案例
目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...
- Maven入门指南⑦:Maven的生命周期和插件
Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...
- webkit入门准备
<webkit入门准备> 1. C++ a) Webkit代码风格 b) Inline c) Const d) 构造与析构 ...
- Spring Boot 2 快速教程:WebFlux 快速入门(二)
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...
- chrom扩展开发-入门
2019独角兽企业重金招聘Python工程师标准>>> 先了解一下chrome的两种功能延伸方式: * 扩展(Extension) 1.指的是通过调用 Chrome 提供的 Chro ...
最新文章
- 曼昆《经济学原理》(第五版)习题解答 第三章 相互依存性与贸易的好处
- 数据中心或许会成为未来5G最强大的技术支撑
- 1、代码中设置编码、编辑器中设置Python的编码
- rpm部署mysql_使用rpm快速安装部署MySQL5.6以及主从设置
- java string输入_怎么让Java获取用户输入的字符串
- Codefroces1077F2. Pictures with Kittens (hard version)
- PyCharm配置Docker
- OpenFOAM工具详解 - renumberMesh
- Cadence如何画PCB封装库
- MATLAB R2016a 简单介绍
- 行为树(Behavior Tree)详细介绍
- java正则表达标点符号_用正则表达式去除标点符号
- Electron 安装报错 'Electron failed to install correctly'
- 最好用的开源免费笔记软件IdeaNote
- 电脑主板资料库 07【转至www.ongood.com.tw】【FreeXploiT收集整理】
- 灵活高效PDF转Word工具
- 微信小程序 API的 promise化
- 该死的ASM IDE
- VC++实现的基于人眼状态的疲劳驾驶识别系统
- PythonQt——yolov5手势识别隔空操纵车载音乐播放器
热门文章
- 交流信号叠加直流偏置_接收无线电信号利器,一款无线有源环形收音机接收天线放大器...
- 城市天际线 android,都市天际线安卓手机版
- java并发编程之HappenBefore
- RAID阵列及常用RAID
- mysql jar jdk1.6_搭建非安装版mysql+jdk1.6+tomcat6
- ubuntu连不上wifi解决办法
- ps图片如何实现渐变
- python 描述性分析_描述性分析-1对被解释变量进行描述
- 弹出数组第一个元素 php,弹出第一个元素数组以在php codeigniter中插入批处理
- python获取命令行参数,使用getopt获取命令行执行时指定的参数