Golang如何实现简易的rpc调用


这篇文章主要介绍“Golang如何实现简易的rpc调用”,在日常操作中,相信很多人在Golang如何实现简易的rpc调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang如何实现简易的rpc调用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!RPC(Remote Procedure Call Protocol)远程过程调用协议。 一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。 比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议 从使用的方面来说,服务端和客户端通过TCP/UDP/HTTP等通讯协议通讯,在通讯的时候客户端指定好服务端的方法、参数等信息通过序列化传送到服务端免费云主机域名,服务端可以通过已有的元信息找到需要调用的方法,然后完成一次调用后序列化返回给客户端(rpc更多的是指服务与服务之间的通信,可以使用效率更高的协议和序列化格式去进行,并且可以进行有效的负载均衡和熔断超时等,因此跟前后端之间的web的交互概念上是有点不一样的) 用一张简单的图来表示本文只实现一个rpc框架基本的功能,不对性能做保证,因此尽量使用go原生自带的net/json库等进行操作,对使用方面不做stub(偷懒,只使用简单的json格式指定需要调用的方法),用最简单的方式实现一个简易rpc框架,也不保证超时调用和服务发现等集成的逻辑。本段先实现两端之间的通讯,只确保两个端之间能互相通讯即可 server.goclient.go使用main.go做测试 main.go执行一次main.go, go run main.go2023/03/05 14:39:11 server [127.0.0.1:9999] start….
2023/03/05 14:39:16 [conn: 127.0.0.1:59126] get data: this is a test可以证明第一部分的任务已经完成,可以实现两端之间的通讯了实现了双端的通信以后,我们在internal.go里实现两个方法,一个是注册,一个是调用,因为go有运行时的反射,所以我们使用反射去注册每一个需要调用到的方法,然后提供全局唯一的函数名,让client端可以实现指定方法的调用internal.go在单测里测试一下这个注册和调用的功能internal_test.go执行调用/usr/local/go/bin/go test -timeout 30s -run ^TestCall$ rpc_demo/internal -vRunning tool: /usr/local/go/bin/go test -timeout 30s -run ^TestCall$ rpc_demo/internal -v

=== RUN TestCall
methods: map[Sum:]
/root/go/src/juejin_demo/rpc_demo/internal/internal_test.go:15: test success
/root/go/src/juejin_demo/rpc_demo/internal/internal_test.go:27: Sum(1,2) = 3
— PASS: TestCall (0.00s)
PASS
ok rpc_demo/internal 0.002s
可以看到这个注册和调用的过程已经实现并且达到指定方法调用的作用设计struct完整表达一次完整的rpc调用,并且封装json库中的Decoder和Encoder,完成序列化和反序列化internal.gotransport.go考虑可以对接更多的格式,所以抽象了一层进行使用(demo肯定没有更多格式了)json_transport.go然后我们将服务端和客户端的逻辑进行修改,改成通过上面两个结构体进行通信,然后返回一次调用 server.goclient.gomain.go接下来我们运行一下main[root@hecs-74066 rpc_demo]# go run main.go
2023/03/05 14:39:11 server [127.0.0.1:9999] start….
2023/03/05 14:39:16 [conn: 127.0.0.1:59126] get data: this is a test

[root@hecs-74066 rpc_demo]# go run main.go
2023/03/05 21:53:41 server [127.0.0.1:9999] start….
2023/03/05 21:53:46 [client] create request to invoke server: {Join [aaaaa bbbbb ccccccccc end]}
2023/03/05 21:53:46 [server] get request: &{Join [aaaaa bbbbb ccccccccc end]}
2023/03/05 21:53:46 [server] invoke method: [aaaaabbbbbcccccccccend]
2023/03/05 21:53:46 [client] get response from server: &{[aaaaabbbbbcccccccccend] }
2023/03/05 21:53:46 [main] get a response from server: aaaaabbbbbcccccccccend
到此,关于“Golang如何实现简易的rpc调用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: CSS中如何实现线性渐变效果

本文小编为大家详细介绍“CSS中如何实现线性渐变效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS中如何实现线性渐变效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 语法linear-gradient([[to |],…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/18 12:36
下一篇 05/18 12:37

相关推荐