在说以太坊的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 是进程内部调用,即 localConsoleIPC 是进程间通信,即 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简介相关推荐

  1. Golang 微框架 Gin 简介

    Golang 微框架 Gin 简介 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框 ...

  2. LeetCode77. 组合Golang版

    LeetCode77. 组合Golang版 1. 问题描述 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4] ...

  3. 阿里云国际版回执消息简介与配置流程

    回执消息是在使用API接口发送短信之后,通过配置MNS消息队列消费模式或HTTP批量推送模式,接收短信发送状态的结果和用户回复的短信内容,帮助您掌握短信的发送成功率和其他业务提供支持.下面和87clo ...

  4. Golang爬虫框架 colly 简介

    Golang爬虫框架 colly 简介 colly是一个采用Go语言编写的Web爬虫框架,旨在提供一个能够些任何爬虫/采集器/蜘蛛的简介模板,通过Colly.你可以轻松的从网站提取结构化数据,然后进行 ...

  5. 网易云API Golang版开发历程

    网易云API Golang版开发历程 原项目(node.js) 网易云音乐 API 本项目 (golang) 网易云音乐 API api文档 请不要用于商业用途 想法的开始 事情的开始还是一开始在B站 ...

  6. 如何手写一个迷你版的RPC

    点击上方"Java后端技术栈"关注 持续推送技术干货 前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以 ...

  7. 实现一个迷你版的RPC

    目录 前言 动手实现RPC 商品服务工程 商品对象 商品查询API接口 rpc实现方法 商品API的具体实现 运行结果 前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者 ...

  8. golang - gob与rpc

    今天和大家聊聊golang中怎么使用rpc,rpc数据传输会涉及到gob编码,所以先讲讲gob,别担心,就算你完全没有接触过gob与rpc,只要知道rpc的中文是远程过程调用,剩下的我都能给你讲明白( ...

  9. Go语言:RPC简介及原理介绍

    背景 在前面的课程<Go语言微服务理论与实践课程>课程中,我们已经学习了微服务的理论知识,了解了微服务实践中需要解决哪些问题.从本篇技术文档开始,我们进入新的微服务内容的学习.在本系列课程 ...

最新文章

  1. 分离颜色通道(split)和多通道融合(merge)
  2. AJAXControlToolkit-Framework3.5SP1 下载地址
  3. python3 http服务端响应源码
  4. C语言文件操作解析(二)【转载】
  5. Linux禁止普通用户su至root
  6. Fiddler抓取https相关设置
  7. smart field demo1 - how does system know currency needs to be rendered
  8. 工具 | 终于等到你!地表最强工具来袭!
  9. 另辟蹊径第二弹,时间规律里的秘密
  10. java 生成二维码,并跟其他图合成新图 图片添加水印
  11. Idea springboot应用,启动报错:org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputExcept
  12. Thinking in Java 13.7扫描输入
  13. ubuntu 18.04 安装 wine5.0
  14. Angular 三目运算符
  15. 基于VHDL的密码锁
  16. 台式机开机黑屏一直闪小横杠,键盘灯鼠标均正常,主板亮
  17. 访谈:Joel Spolsky谈开发人员角色的变化
  18. 哪吒GT:200万以内最好的纯电跑车,售价17.88万元起
  19. 五子棋游戏源码和核心算法的讲解(简易五子棋web版)
  20. 2021青岛十九中高考成绩查询,@青岛高考生 2020新高考模拟考可以查成绩了

热门文章

  1. 华为手机计算机删除怎么恢复出厂设置,华为手机恢复出厂设置后怎么还原【图文】...
  2. 6月3日至5日 服务器信息维修,6月3日服务器例行维护公告
  3. 在线教育与知识付费系统,有何区别?
  4. 启动Mysql服务报windows无法启动Mysql服务(位于本地计算机上) 错误2:系统找不到指定的文件
  5. 蓝桥杯基础练习 Python实现字母图形
  6. Scrapy 爬虫实战-爬取字幕库
  7. 小网吧的电影服务器搭建实例 即软件下载
  8. php randexcp,php 自定义UTF8和cp1251函数
  9. php a链接怎么传id_id建议连接服务器失败
  10. 34. 你与周围人的差距