golang下的rpc框架jsonrpc理解和使用示例
说明
本文的目的
- 理解一下rpc协议使用上的区别
- golang下jsonrpc框架的使用
示例
定义RPC协议
import "github.com/pkg/errors"//定义一个叫做Demo的Rpc服务协议
//包含参数结构和2个不同的参数处理协议
// 返回值通过result指针获取,这点是由RPC服务来定义的
type DemoService struct {
}//包含1: 参数的个数和类型
type Args struct {A, B int
}//包含2: 参数的处理协议 除法协议
func (DemoService) Div(args Args, result *float64) error {if args.B == 0 {return errors.New("divide by zero")}*result = float64(args.A) / float64(args.B)return nil
}//包含2: 参数的处理协议 乘法协议
func (DemoService) Muti(args Args, result *int) error {*result = args.A * args.Breturn nil
}
注册为服务端
package mainimport ("fmt""learning_go/rpc/demorpc""net""net/rpc""net/rpc/jsonrpc"
)func main() {//注册demoService到rpc框架中,成为当前server的rpc协议之一rpc.Register(demorpc.DemoService{})listen, err := net.Listen("tcp", ":9999")if err!=nil{panic(err)}for {conn, err := listen.Accept()if err!=nil{fmt.Println("Server listens error")continue}go jsonrpc.ServeConn(conn)}
}
客户端测试
通过telnet测试
telent localhost 9999 链接上后如初参数
"method":"DemoService.Div","params":[{"A":3,"B":4}],"id":1}
=》{"id":1,"result":0.75,"error":null}
{"method":"DemoService.Muti","params":[{"A":3,"B":4}],"id":1}
=>{"id":1,"result":12,"error":null}说明不同的参数可以调用不同的协议
注意:虽然服务器启动了端口,但是不能通过接口调用,因为接口使用的http协议,会包含http的头部和body,数据格式不符合我们定义的rpc协议
通过客户端测试
package mainimport ("fmt""learning_go/rpc/demorpc""net""net/rpc/jsonrpc"
)func main() {conn, err := net.Dial("tcp",":9999")if err!=nil{panic(err)}var result1 float64var result2 intclient := jsonrpc.NewClient(conn)//调用除法err = client.Call("DemoService.Div",demorpc.Args{A: 3,B: 4,}, &result1)fmt.Println(result1,err)//调用乘法err = client.Call("DemoService.Muti",demorpc.Args{A: 3,B: 4,}, &result2)fmt.Println(result2,err)
}
结论
- 可以自定义server的协议参数和协议动作
- 注册到jsonrpc框架后,可以借助框架实现服务间的rpc调用
- rpc基于自定义协议,而http基于http协议,两者主要在于协议不同
- 协议的本质就是数据交换格式
golang下的rpc框架jsonrpc理解和使用示例相关推荐
- 手写一个RPC框架,理解更透彻(附源码)
作者:烟味i www.cnblogs.com/2YSP/p/13545217.html 一.前言 前段时间看到一篇不错的文章<看了这篇你就会手写RPC框架了>,于是便来了兴趣对着实现了一遍 ...
- c# 调用restful json_微服务调用为啥用RPC框架,http不更简单吗?
背景 在一次的面试交谈中,聊到业务实现的技术架构.不管系统大小,一般都是微服务的架构,所以就产生了一个问题,为什么服务之间调用,选择用RPC,http 不也能实现服务之间的通信吗?怎么不用呢?或者 R ...
- RPC框架Kitex入门
这是我参与「第五届青训营 」笔记创作活动的第 13 天 前言 前一篇笔记介绍了字节跳动的开源 Golang 微服务 HTTP 框架 Hertz,本文将要介绍同样是字节跳动开源的 Golang 微服务 ...
- 远程过程调用RPC 2:RPC思想与RPC框架
RPC思想与RPC框架 RPC思想 组成部分 RPC框架 完整的RPC框架 RPC调用关键点 RPC框架分类对比 RPC和REST REST主要原则 对比 RPC思想 上一篇笔记:远程过程调用RPC ...
- 分布式RPC框架Dubbo详解
目录 1.架构演进 1.1 单体架构 1.2 垂直架构 1.3 分布式架构 1.4 SOA架构 1.5 微服务架构 2.RPC框架 2.1 RPC基本概念介绍 2.1.1 RPC协议 2.1.2 R ...
- 面试精讲之面试考点及大厂真题 - 分布式专栏 05 公司使用什么RPC框架,聊聊你理解的RPC原理
05 公司使用什么RPC框架,聊聊你理解的RPC原理 引言 前些年我们在做一个规模不大的系统的时候,也就是单体架构,一台服务器部署上一个应用和数据库也就够了.但是现代化互联网公司业务逐渐扩大,服务逐渐 ...
- RPC 框架 Dubbo 从理解到使用(一)
技术架构演变 学习 Dubbo 之前我们有必要先来了解一下互联网技术架构的演变过程及通信方式,方便我们搞清楚为什么需要使用基于 RPC 思想的系列框架. 单一应用架构 通俗地讲,"单体应用( ...
- windows下rpc框架thrift的环境配置
windows下rpc框架thrift的环境配置 引用链接: https://www.cnblogs.com/49er/p/7193829.html 最近在弄windows下 的Facebook的rp ...
- jsonrpc php使用,利用php怎么编写一个json rpc框架
利用php怎么编写一个json rpc框架 发布时间:2020-12-25 15:24:41 来源:亿速云 阅读:71 作者:Leah 本篇文章为大家展示了利用php怎么编写一个json rpc框架, ...
- 分布式 - 公司使用什么RPC框架,聊聊你理解的RPC原理
不啰嗦,我们直接开始! 引言 以前在做一个规模不大的系统的时候,用的是单体架构,一台服务器部署上一个应用和数据库也就够了. 但是现代化互联网公司业务逐渐扩大,服务逐渐细分,很多服务之间需要通过远程分布 ...
最新文章
- qteewidgetitem添加子节点_行为树的节点
- Linux装多个apache,windows linux如何安装多个apache?
- Nginx正向代理与反向代理
- Python实现朴素贝叶斯算法
- pandas对每十行做批量操作_pandas批量处理数据
- 计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)
- scrapy需要的xpath知识点
- 文献学习(part13)--A Sober Look at the Unsupervised Learning of Disentangled...
- DBN训练学习-A fast Learning algorithm for deep belief nets
- createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查
- mysql 5.5.23 winx64,win10下mysql 5.7.23 winx64安装配置方法图文教程
- Java 算法 理财计划
- [转载] Numpy 数学函数及逻辑函数
- 荷兰国旗问题(C语言)
- 屏幕录像大师2016【破解版】
- Fake Location(安卓)
- 【实践】多条曲线在一幅图上,Origin如何对每一条曲线单独设置
- web端用canvas把航拍图片实际场景渲染在高德卫星地图上面
- 聊聊阅读源码那些事儿
- mpv官方文档部分快捷键