Go七天实现RPC

这篇具有很好参考价值的文章主要介绍了Go七天实现RPC。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0.前言

本文是学习自7天用Go从零实现RPC框架GeeRPC | 极客兔兔

在此基础上,加入自己的学习过程与理解。

自己实现过程的完整代码:https://github.com/liwook/Go-projects/tree/main/geerpc

1.RPC 框架

RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许调用不同进程空间的程序。RPC 的客户端和服务器可以在一台机器上,也可以在不同的机器上。程序员使用时,就像调用本地程序一样,无需关注内部的实现细节。

简单点说,是两个 不同的进程 之间进行信息的交换, 而这两个进程有可能分布在 不同的机器 上。 那就需要进行网络通信,那常用的就有HTTP协议。

2.为什么需要RPC

怎么理解rpc,既然有http请求了为啥还要用rpc? - 知乎

怎么理解rpc,既然有http请求了为啥还要用rpc? - 知乎

 知乎上的两个回答。

大多数人疑惑既然有HTTP请求可以解决系统间调用的问题了,为什么还会有人使用RPC调用?

而RPC是先于HTTP出现的。

这两个都有各自的用途。RPC更合适用在分布式中。一般来说,RPC的性能比HTTP会更强,大多数RPC框架也提供了很多功能,

在发起下游调用的时候,有时需要做一些功能。比如我们想统计一下下游每个接口调用的耗时、超时、异常情况,这个时候就使用rpc框架非常方便了,因为大多数的rpc框架都会提供一个事件或者钩子给我们,我们就能很方便的做这些事情。除此之外,很多rpc框架还提供了强大而精准的限流、熔断等能力。

而HTTP协议在1990年才开始作为主流协议出现,而且HTTP发明的场景是用于web架构。而现在大部分的系统都是给浏览器使用的,因此HTTP协议必不可少,一些小公司用HTTP也容易搭建自己的架构,成本也低,也好维护。

3.实现RPC

Go 语言广泛地应用于云计算和微服务,成熟的 RPC 框架和微服务框架汗牛充栋。grpcrpcx等都是非常成熟的框架。一般而言,RPC 是微服务框架的一个子集,微服务框架可以自己实现 RPC 部分,当然,也可以选择不同的 RPC 框架作为通信基座。

考虑性能和功能,上述成熟的框架代码量都比较庞大,而且通常和第三方库,例如 protobufetcd等有比较深的耦合,难以直观地窥视框架的本质。该RPC 的目的是以最少的代码,实现 RPC 框架中最为重要的部分,帮助大家理解 RPC 框架在设计时需要考虑什么。代码简洁是第一位的,功能是第二位的。

因此,我们选择从零实现 Go 语言官方的标准库 net/rpc,并在此基础上,新增了协议交换(protocol exchange)注册中心(registry)服务发现(service discovery)负载均衡(load balance)超时处理(timeout processing)等特性。

每个版本的讲解

PRC教程 1.服务端与消息编码

RPC教程 2.支持并发与异步的客户端

RPC教程 3.服务注册

RPC教程 4.超时处理机制

RPC教程 5.支持HTTP协议

RPC教程 6.负载均衡

RPC教程 7.服务发现与注册中心文章来源地址https://www.toymoban.com/news/detail-804598.html

到了这里,关于Go七天实现RPC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go微服务: 基于net/rpc/jsonrpc模块实现微服务跨语言调用

    概述 Golang 提供 net/rpc/jsonrpc 库来实现rpc方法 采用 json 方式进行数据编解码,支持跨语言调用 这里实现跨语言示例 1 ) go 服务端 2 ) nodejs 客户端1 3 ) nodejs 客户端2 4 ) go 客户端3 总结 这里演示了,基于go语言为服务端,nodejs 和 golang 为客户端的3种示范 注意,上面 nodejs版本

    2024年03月17日
    浏览(32)
  • Go语言网络编程入门:TCP、HTTP、JSON序列化、Gin、WebSocket、RPC、gRPC示例

    在本文中,我们将介绍Go语言中的网络编程的不同方式,包括TCP、HTTP、Gin框架、WebSocket、RPC、gRPC的介绍与连接实例,并对所有示例代码都给出了详细的注释,最后对每种模式进行了总结。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,提供

    2024年02月16日
    浏览(48)
  • RPC原理与Go RPC详解

    RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。 RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。 首先与RPC(远程过程调用)相对应的是本地调用。 本地调用 将上述程序编译成二

    2024年02月14日
    浏览(25)
  • 实现跨语言通信的便捷之道:RPC在Java和Go中的使用案例

    导语: 在现代软件开发中,构建分布式系统和跨语言通信变得越来越常见。RPC(远程过程调用)作为一种通信协议,提供了一种简单而高效的方式来实现不同语言之间的通信。本文将探讨RPC的使用案例,并展示如何在Java和Go之间实现跨语言通信。 什么是RPC? RPC是一种允许不

    2024年01月19日
    浏览(38)
  • C++ 简单实现RPC网络通讯

            RPC是远程调用系统简称,它允许程序调用运行在另一台计算机上的过程,就像调用本地的过程一样。RPC 实现了网络编程的“过程调用”模型,让程序员可以像调用本地函数一样调用远程函数。最近在做的也是远程调用过程,所以通过重新梳理RPC来整理总结一下。  

    2023年04月08日
    浏览(30)
  • 【Go】四、rpc跨语言编程基础与rpc的调用基础原理

    早期 Go 语言不使用 go module 进行包管理,而是使用 go path 进行包管理,这种管理方式十分老旧,两者最显著的区别就是:Go Path 创建之后没有 go.mod 文件被创建出来,而 go module 模式会创建出一个 go.mod 文件用于管理包信息 现在就是:尽量使用 Go Modules 模式 另外,我们在引入包

    2024年02月19日
    浏览(28)
  • go rpc

    运用go标准库写一个rpc例子 服务端 注意绑定的对象方法,必须有两个参数,第二个参数必须是“指针类型”为传出参数。方法只有一个error类型的返回值。 客户端 注意:上面代码中rpc的远程函数调用采用的是golang中特有的序列化包gob,其他语音不能解析。所以,要进行不同

    2024年02月12日
    浏览(22)
  • Go RPC 库

    RPC(Remote Poresedure Call)是远程方法调用的缩写。Go的RPC库可以实现通过网络或者其他I/O方式远程调用对象的方法。 服务器注册一个对象,让它作为一个以对象类型命名的服务,让这个对象导出的方法可以被远程调用。一个服务器可以注册多个不同类型的对象,但是不能注册同一

    2024年02月19日
    浏览(25)
  • 开源 Golang 微服务入门二:RPC 框架 Kitex

    前一篇笔记介绍了字节跳动的开源 Golang 微服务 HTTP 框架 Hertz, 如下: 开源 Golang 微服务入门一: HTTP 框架 Hertz 本文将要介绍同样是字节跳动开源的 Golang 微服务 RPC 框架 Kitex。 Kitex 简介 Kitex 字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部

    2024年02月09日
    浏览(29)
  • php-golang-rpc 简单的jsonrpc实践

    golang代码: package main import (     \\\"net\\\"     \\\"net/rpc\\\"     \\\"net/rpc/jsonrpc\\\" ) type App struct{} type Res struct {     Code int    `json:\\\"code\\\"`     Msg  string `json:\\\"msg\\\"`     Data any    `json:\\\"data\\\"` } func (*App) Hi(mp map[string]any, res *Res) error {     res.Code = 200     res.Msg = \\\"成功\\\"     var rmp = make(map[string]

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包