GoLang版的RPC简介
在说以太坊的RPC前,先来解释RPC是什么。
RPC简介
RPC全称是Remote Procedure Call,即远程过程调用。它可用于相同编程语言之间调用,也可用于不同编程语言间的调用。本文以golang语言来实现服务端和客户端的RPC实现。
RPC的GoLang版Demo
RPC
服务端的作用是提供服务,让客户端可以调用服务端的方法。为了实现简单,本文准备是Demo是接收客户端的一个字符串,然后和服务端的一个字符串拼接后返回到客户端。
第一步,声明一个服务的对象,该对象下可以包含多个供客户端调用的方法,这些方法通常会传入两个参数,第一个参数用来传递客户端发过来的请求数据,第二个参数用来返回服务端发给客户端的响应数据,而方法的返回值则是一个 error
。
第二步,把上述声明的服务对象注册到rpc服务中,然后启动一个 TCP
监听,然后把 RPC
服务放到 TCP
上为客户端提供服务。
RPC
服务可以放到很多种类的连接上,比如以太坊,就提供了 InProc、IPC、HTTP、WS
四种方式。其中,InProc
是进程内部调用,即 localConsole
,IPC
是进程间通信,即 remoteConsole
,传入的参数可能是.ipc文件的路径,也可能是http地址,HTTP
是以 http
协议的方式通信(web3.js使用的就是这种方式的调用,具体内容可以参看JSON-RPC 2.0 规范),WS
是以 WebSocket
的方式通信。
服务端代码如下:
package mainimport ("fmt""net""net/rpc"
)type HelloService struct {}func (hello *HelloService) SayHello(req string, reply *string) error {*reply = "say hello: " + reqreturn nil
}func main() {rpc.RegisterName("helloService", new(HelloService))listen, err := net.Listen("tcp",":1234")if err != nil {fmt.Println("Listen: ", err)}conn, err := listen.Accept()if err != nil {fmt.Println("Accept: ", err)}rpc.ServeConn(conn)
}
RPC
客户端则可以多种方式去访问服务端提供的服务,本文以 GoLang
版的 TCP
协议来访问服务端。
首先使用 TCP
协议和服务端建立 RPC
连接,然后使用 Call
方法调用服务端的方法,这里需要三个参数,第一个是服务端的服务,第二个是要传给服务端的数据,第三个则是接收服务端传回来的数据。
客户端代码如下:
package mainimport ("fmt""net/rpc"
)func main() {client, err := rpc.Dial("tcp", "localhost:1234")if err != nil {fmt.Println("dial: ", err)}var reply stringerr = client.Call("helloService.SayHello", "client hello", &reply)if err != nil {fmt.Println("call: ", err)}fmt.Println(reply)
}
上述代码的执行结果,会在客户端打印如下内容:
say hello: client hello
至此,GoLang
版的 ‘RPC Demo’ 就正式做完了,接下来介绍以太坊中的 RPC
。
GoLang版的RPC简介相关推荐
- Golang 微框架 Gin 简介
Golang 微框架 Gin 简介 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框 ...
- LeetCode77. 组合Golang版
LeetCode77. 组合Golang版 1. 问题描述 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4] ...
- 阿里云国际版回执消息简介与配置流程
回执消息是在使用API接口发送短信之后,通过配置MNS消息队列消费模式或HTTP批量推送模式,接收短信发送状态的结果和用户回复的短信内容,帮助您掌握短信的发送成功率和其他业务提供支持.下面和87clo ...
- Golang爬虫框架 colly 简介
Golang爬虫框架 colly 简介 colly是一个采用Go语言编写的Web爬虫框架,旨在提供一个能够些任何爬虫/采集器/蜘蛛的简介模板,通过Colly.你可以轻松的从网站提取结构化数据,然后进行 ...
- 网易云API Golang版开发历程
网易云API Golang版开发历程 原项目(node.js) 网易云音乐 API 本项目 (golang) 网易云音乐 API api文档 请不要用于商业用途 想法的开始 事情的开始还是一开始在B站 ...
- 如何手写一个迷你版的RPC
点击上方"Java后端技术栈"关注 持续推送技术干货 前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以 ...
- 实现一个迷你版的RPC
目录 前言 动手实现RPC 商品服务工程 商品对象 商品查询API接口 rpc实现方法 商品API的具体实现 运行结果 前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者 ...
- golang - gob与rpc
今天和大家聊聊golang中怎么使用rpc,rpc数据传输会涉及到gob编码,所以先讲讲gob,别担心,就算你完全没有接触过gob与rpc,只要知道rpc的中文是远程过程调用,剩下的我都能给你讲明白( ...
- Go语言:RPC简介及原理介绍
背景 在前面的课程<Go语言微服务理论与实践课程>课程中,我们已经学习了微服务的理论知识,了解了微服务实践中需要解决哪些问题.从本篇技术文档开始,我们进入新的微服务内容的学习.在本系列课程 ...
最新文章
- 分离颜色通道(split)和多通道融合(merge)
- AJAXControlToolkit-Framework3.5SP1 下载地址
- python3 http服务端响应源码
- C语言文件操作解析(二)【转载】
- Linux禁止普通用户su至root
- Fiddler抓取https相关设置
- smart field demo1 - how does system know currency needs to be rendered
- 工具 | 终于等到你!地表最强工具来袭!
- 另辟蹊径第二弹,时间规律里的秘密
- java 生成二维码,并跟其他图合成新图 图片添加水印
- Idea springboot应用,启动报错:org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputExcept
- Thinking in Java 13.7扫描输入
- ubuntu 18.04 安装 wine5.0
- Angular 三目运算符
- 基于VHDL的密码锁
- 台式机开机黑屏一直闪小横杠,键盘灯鼠标均正常,主板亮
- 访谈:Joel Spolsky谈开发人员角色的变化
- 哪吒GT:200万以内最好的纯电跑车,售价17.88万元起
- 五子棋游戏源码和核心算法的讲解(简易五子棋web版)
- 2021青岛十九中高考成绩查询,@青岛高考生 2020新高考模拟考可以查成绩了
热门文章
- 华为手机计算机删除怎么恢复出厂设置,华为手机恢复出厂设置后怎么还原【图文】...
- 6月3日至5日 服务器信息维修,6月3日服务器例行维护公告
- 在线教育与知识付费系统,有何区别?
- 启动Mysql服务报windows无法启动Mysql服务(位于本地计算机上) 错误2:系统找不到指定的文件
- 蓝桥杯基础练习 Python实现字母图形
- Scrapy 爬虫实战-爬取字幕库
- 小网吧的电影服务器搭建实例 即软件下载
- php randexcp,php 自定义UTF8和cp1251函数
- php a链接怎么传id_id建议连接服务器失败
- 34. 你与周围人的差距