嵌入式Linux应用开发之内置RPC

rpc是远程过程调用的简称,是分布式系统中不同节点间流行的通信方式。互联网时代,rpc已经和ipc一样成为一个不可或缺的基础构件。 go语言的标准库也提供了一个简单的rpc实现,包名为net/rpc。下面是使用该包的基本框架:
在server端需要完成两件事
明确服务名称和接口方法:方法只能有两个可序列化的参数,第二个参数是指针类型,并返回error类型,同时必须是公开的方法
注册rpc服务并绑定到某一端口进行监听
//构造一个类型,添加hello方法type helloservice struct{}//注意go语言的rpc规则func (p *helloservice) hello(request string, reply *string) error { *reply = hello: + request return nil}func main() { rpc.registername(helloservice, new(helloservice)) //注册结构体类型为rpc服务 //这里建立tcp连接用于rpc服务,也支持http协议的rpc listener, err := net.listen(tcp, :1234) if err != nil {  log.fatal(listen tcp error:, err) } conn, err := listener.accept() if err != nil {  log.fatal(accept error:, err) } rpc.serveconn(conn)} 在client需要完成一件事:访问端口连接并调用接口方法
func main() { //尝试与server端建立tcp连接 client, err := rpc.dial(tcp, localhost:1234) if err != nil {  log.fatal(dial rpc error:, err) } var reply string //调用远程方法并传入参数 err = client.call(helloservice.hello, barret, &reply) if err != nil {  log.fatal(call rpc function error:, err) } fmt.println(reply)} 需要注意的是:标准库的rpc默认采用go语言特有的gob编码,因此从其它语言调用go语言实现的rpc服务将比较困难。虽然可以通过额外的工作支持跨语言,但是其实没必要,我们可以使用protobuf和grpc等框架支持跨语言。


一种增加量子处理器内量子比特数量的新方法
怎样辨别出防盗报警主机质量的优劣,如何选择
基于RK3588处理器的高性能,高算力,低功耗核心板XC3588_CORE
区块链宠物系统的优势之处
笔记本维修中常见的商家作弊手段曝光
嵌入式Linux应用开发之内置RPC
奥地利微射频技术助力美国DeviceFidelity独立近场通信MicroSD卡
OOVA正在试行一种基于AI的生育工具
零跑“四叶草”中央集成式电子电气架构
采用4引脚封装的SiC MOSFET:SCT3xxx xR系列
展会预告 | 斯丹麦德电子诚邀您共聚2022慕尼黑华南电子展
关于基于现场总线的氙气灯多级调光安定器的设计与实现
如何在C程序中采用面向对象编程
Linux操作系统知识讲解:走进内存
有什么方法能判断变压器质量的好坏?
产生涡旋光束的方法介绍
变电站无人值守方案:提升效率与增强安全性
新能源汽车三电控制器联调实验室
北京2020年重点工作之一:重点发展集成电路产业
2019年AI和ML的技术以及IoT将在数字化转型之旅中发挥转变作用