理解基本的RPC实现:从概念到实践

RPC 的概念模型与实现解析 今天分布式应用、云计算、微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:)全文目录如下: 定义 起源 目标 分类 结构 模型 拆解 组件 实现 导出 导入 协议 编解码 消息头 消息体 传输 执行 异常 总结 参考 两年前写过两篇关于 RPC 的文章,如今回顾发现结 阅读详情

远程过程调用(Remote Procedure Call, RPC)是一种协议,它允许一个程序通过网络请求另一个地址空间中的子例程或服务,而不需要了解底层网络细节。本文将基于Go语言,通过实际代码示例介绍如何实现基本的RPC功能。

1.基础概念与准备工作

在开始之前,我们首先定义了一些基础的数据结构和函数。例如,有一个简单的Add函数用于计算两个整数的和,以及描述公司和员工信息的结构体Company和Employee。此外,还有一个PrintResult结构体,用于封装远程打印操作的结果。

package main

import "fmt"

func Add(a, b int) int {
    sum := a + b
    return sum
}

type Company struct {
    Name    string
    Address string
}

type Employee struct {
    Name    string
    Company Company
}
type PrintResult struct {
    Result string
    Err    error
}

2.实现RPC逻辑

尽管上述代码片段中并未完整展示RPC的具体实现,但其中包含了关键点提示:

  • 序列化:为了在网络上传输数据,需要先将其转换为字节流,通常使用JSON、Protocol Buffers等格式。
  • 传输层:可以选择TCP、HTTP等作为传输层协议。推荐使用HTTP/2.0,因为它支持长连接,提高了效率。

服务端与客户端的工作流程

  • 服务端

    • 监听特定端口。
    • 接收并解析来自客户端的数据。
    • 根据接收到的数据执行相应的业务逻辑。
    • 将处理结果序列化后返回给客户端。
  • 客户端

    • 发起对服务端的请求,并将参数序列化。
    • 等待服务端响应。
    • 对返回的数据进行反序列化,以获取最终结果。

3.使用HTTP实现简易版的“RPC”

接下来,我将演示如何利用HTTP协议来实现类似于RPC的功能。这里,我创建了一个简单的HTTP服务器,该服务器能够接收GET请求,执行加法运算,并返回结果。

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"strconv"
)

func main() {
	http.HandleFunc("/add", func(w http.ResponseWriter, r *http.Request) {
		_ = r.ParseForm()
		a, _ := strconv.Atoi(r.Form["a"][0])
		b, _ := strconv.Atoi(r.Form["b"][0])
		w.Header().Set("Content-Type", "application/json")
		jData, _ := json.Marshal(map[string]int{"data": a + b})
		_, _ = w.Write(jData)
	})
	_ = http.ListenAndServe(":8000", nil)
}

同时,我也编写了对应的客户端代码,用于向服务器发送请求并解析响应。

type ResponseData struct {
	Data int `json:"data"`
}

func Add(a, b int) int {
	request := HttpRequest.NewRequest()
	//res, _ := request.Get("http://127.0.0.1:8000/add?a=1&b=2")
	res, _ := request.Get(fmt.Sprintf("http://127.0.0.1:8000/%s?a=%d&b=%d", "add", a, b))
	body, _ := res.Body()
	//fmt.Println(string(body))
	resData := ResponseData{}
	_ = json.Unmarshal(body, &resData) // 解析json
	return resData.Data                // 返回结果
}

func main() {
	fmt.Println(Add(1, 2))
}

4.总结

虽然这里展示的例子并非传统意义上的RPC框架,但它展示了RPC背后的基本原理:通过网络传输数据,调用远端的服务,并处理返回结果。对于更复杂的场景,可以考虑使用成熟的RPC框架如gRPC,它们提供了更多高级特性,比如负载均衡、健康检查等,同时支持多种语言。

希望这篇博客可以帮助你更好地理解RPC的基础知识及其应用。

【RPC】RPC和Http的理解 文章目录一、概述二、RPC2.1、RPC定义2.2、RPC主要组成部分三、影响RPC框架性能的因素四、问题1.面试官:公司使用什么 RPC 框架?,可以介绍一下 RPC 的工作原理吗?2.面试官:服务启动的时候服务基本信息被注册到注册中心,如果服务提供者挂了,注册中心如何知道服务不可用了呢?3.面试官:如果注册中心挂了,比如你用的是 Zookeeper,如果 Zookeeper 挂了,那服务之间还能相互调用吗?4.面试官:你对 RPC 了解的很透彻,那你能否自己写一个 RPC 框架?可以简答描述下思路也行。 阅读详情

相关推荐

RPC原理与FastRPC实现

你到一家餐厅吃饭,店里有一个服务员为你服务。你点完菜之后,服务员就走进了后厨。但是,服务员并不是直接将你点的菜告诉他们店里的厨师,相反的,他打电话到别的店点了外卖,外卖到了之后他将饭菜重新装盘,然后给你端了上来。但是你是不知道这个细节的,在你看来,这次吃饭和以往的任何一次没有区别,服务员端上的饭菜在哪里做的你是不知道的,你和平常一样点了菜然后菜就上了,你并不需要自己去关心怎么找到外卖电话,怎么将饭菜装盘。你只管点菜和吃,除了可能等的时间比以往略久,没有任何区别。这个栗子中,服务员就扮演着RPC 中代理的角色

SunnyZhou-1024的博客 6162

RPC 的原理分析及代码实践

本篇文章旨在以学习的姿态来研究 RPC 的框架原理,期望能够通过手写代码的方式更深入了解主流 RPC 框架的实现逻辑。让阅读完框架源码有一个大胆尝试的机会,也不至于过后不久就忘的一干二净。

u010173024的博客 2251

RPC通信基本原理 -- 浅析RPC远程过程调用基本原理

RPC 的全称是是一种进程间通信方式。RPC只是一个概念 而不是具体的协议或框架。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。另外,RPC是与语言无关的。

IT小郭的技术博客 4592

手写简易RPC(实践版)

rpc-远程过程调用,openFeign,Dubbo都可以算作rpc,以微服务来具体说明,就是在本地不需要去发送请求,通过rpc框架,像调用本地方法一样调用其他服务的方法,本质上还是要经过网络,去请求其他服务的资源。构造好必要的参数,向rpc发起请求,rpc通过http请求,向存在的provider的网络请求资源,执行对应的方法,然后将结果进行处理返回给。一般rpc都会有一个注册中心,使用rpc框架的服务称为消费者,被调用的服务成为生产者,以下是简单的图示。需要启动一个网络服务,成为一个提供服务的服务器;

weixin_68693132的博客 1320

深入理解 RPC:概念、作用与在.NET 中的应用

RPC,即远程过程调用(Remote Procedure Call),是一种计算机通信协议,它允许一个程序在一台计算机上调用另一个程序在不同计算机上的函数或方法,就好像这个函数或方法是在本地执行一样。RPC 隐藏了网络通信的复杂性,使得分布式系统中的不同部分能够以一种简单、直观的方式进行交互。在使用 RPC 框架之前,需要先定义服务接口。服务接口定义了远程服务提供的方法和参数类型,客户端可以通过调用这些方法来与远程服务进行交互。在.NET 中,可以使用接口或抽象类来定义服务接口。

candy的博客 1803

RPC技术原理与实践指南

本文还有配套的精品资源,点击获取 简介:RPC(远程过程调用)是分布式系统中实现通信的一种关键技术,允许程序在不同的计算机之间进行类似本地调用的方式交互。本资源包含RPC的基础知识、架构原理、协议标准、Linux环境下的编程实践以及实例剖析。文档详细介绍了RPC的请求打包、发送、接收和解包流程,以及服务定位器、序列化协议等关键组件,并通过实例帮助理解其在实际中的应用。 ...

weixin_35761094的博客 1280

RPC实践

一. RPC是什么? remote procedure call,远程过程调用。其中远程表示不同应用间的调用,过程就是业务处理,计算任务,更直白理解,就是程序(像调用本地方法一样调用远程的过程)。 RPC采用Client-Server结构,通过request-response消息模式实现。 RPC和RMI有什么区别? RMI(remote method invocation) 远程方法调用时oop领域中RPC的一种具体实现。 我们熟悉的webservice,restful接口调用是RPC吗?

G0_hw 404

深入理解RPC的设计与实现

RPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机程序上请求服务的技术。RPC的提出是为了简化分布式系统之间的通信复杂性,让开发者在编写代码时能像调用本地方法一样调用远程方法。序列化是将对象状态转换为可存储或传输的格式的过程,在RPC中主要是将对象转换为字节流以便于通过网络传输。反序列化则是序列化的逆过程,将字节流转换回对象的过程。序列化对于RPC框架来说至关重要,因为它直接影响到远程调用的性能和安全性。

weixin_33239721的博客 1129

RPC原理以及实践

1. 认识RPC RPC(Remote Procedure Call)是指远程过程调用,在微服务架构中,各个微服务之间的通信一般使用RPC,比如用户微服务和订单微服务,需求是在用户微服务中查询当前用户的订单,此时用户服务是RPC的请求端,订单微服务是RPC的服务端。 2. RPC原理 2.1 要实现RPC有3个难点问题: ①如何让客户端知道服务端提供的RPC接口以及方法? 方法一:客户端和服务端在pom文件中同时依赖定义了接口的依赖,服务端需要实现这些接口,提供服务 方法二:比如Spring Cloud F

Demodemon的博客 633

RPC Linux实例:从概念到实现的完整指南

RPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。这一协议允许开发者以本地函数调用的方式,操作远程的计算机资源。rpcgen是一个用于生成RPC程序代码的工具,它能够基于用户定义的RPC接口,自动生成C语言的客户端存根(stub)和服务器框架代码。存根是客户端与服务器交互时用到的接口代码,框架代码则为服务端提供了接收和处理请求的逻辑。通过使用rpcgen。

weixin_36288992的博客 1057

红外气体检测方案解析:从NDIR原理到物联网终端设计实践

气体检测是工业安全与环境监测的核心需求,其技术原理主要基于气体分子对特定物理或化学信号的响应。非色散红外(NDIR)技术作为一种物理检测方法,通过测量气体分子对特定波长红外光的吸收来定量浓度,因其不依赖化学反应,具备寿命长、抗干扰强和响应快等优势。在工程实践中,红外气体检测方案的价值在于为物联网终端设备提供了高可靠、低功耗的感知能力,广泛应用于工业过程监控、环境空气质量监测以及智能家居安全预警等场景。本文以一套集成了Microchip MCU、Axetris红外光源和Pyreos热释电传感器的参考设计为例,

weixin_30954817的博客 393

【RPC】RPC基本介绍

0. RPC是什么 1. RPC的核心组成部分 1.1 服务调用方(Consumer) 1.2 服务提供方(Provider) 1.3 本地存根(stub) 1.4 RPC通信者(RPCRuntime) 2. RPC调用过程 2.1 服务暴露的过程 2.2 服务发现的过程 2.3 服务引用的过程 2.4 方法调用的过程......

一定要站在自己热爱的生活里闪闪发光 3万+

华为P30/pro (ELE-AL00) 鸿蒙4.2降级 EMUI 9

分享

m0_52356707的博客 1万+

RPC核心概念理解

rpc

weixin_42127508的博客 2750

QT6与QT5安装全攻略:从下载到环境配置一站式指南

本文提供了一份详尽的QT6与QT5安装教程,涵盖从版本选择、在线安装器使用到环境变量配置的全过程。针对新手常见痛点,重点对比了QT6与QT5的安装差异,并给出了MinGW与MSVC编译器的选择建议,旨在帮助开发者快速搭建稳定可用的QT开发环境,避免常见错误。

weixin_29216353的博客 309

FLAC3D数值三轴测试

本文介绍了使用FLAC3D进行数值三轴测试的命令流程。通过建立圆柱体模型,设置Mohr-Coulomb本构模型及材料参数,施加边界条件和荷载,并定义Fish函数监测应变和应力。命令包括模型创建、网格划分、材料属性定义、边界约束、荷载施加以及结果监测等步骤。该流程可用于模拟岩土材料在三轴条件下的力学响应,为数值分析提供参考。完整代码可从指定链接下载获取。

qq_36980284的博客 98

RPC框架基本概念和简单实现

文章目录一、基本概念二、技术简介三、最简单的RPC实现1、服务端2、客户端四、开源知名RPC框架 一、基本概念 RPC的全称是Remote Procedure Call,它是一种进程间的通信方式。允许像调用本地服务一样调用远程服务。 可以将RPC框架整体分为三部分:客户端、服务端、注册中心 客户端: 1、引用服务端暴露出来的接口; 2、与注册中心连接,向注册中心发送请求,获取服务地址信息; 3、创建服务接口代理,并调用,最后获取返回的结果。 服务端: 1、实现对外暴露的服务接口; 2、与注册中

WU4566285的博客 538

【嵌入式DIY实例-ESP32篇】-智能花园助手

本文介绍了一个基于ESP32的智能花园监控系统。系统使用ESP-EYE摄像头开发板,集成了土壤湿度传感器、DHT22温湿度传感器和电磁阀等模块,实现植物生长环境监测与自动灌溉功能。硬件部分详细说明了各传感器的接线方式,软件部分展示了如何通过Firebase实现数据存储和远程监控。系统可实时采集土壤湿度、空气温湿度等数据,并通过摄像头监控植物状态,当检测到环境参数异常时,可自动控制水泵进行灌溉,为植物提供最佳生长环境。

视觉与物联智能 263

RPC的基本概念

1、概述经过了详细的信息格式、网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热。从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的讲解:RPC。在后续的几篇文章中,我们首先讲解RPC的基本概念,一个具体的RPC实现会有哪些基本要素构成,然后我们详细介绍一款典型的RPC框架:Apache Thrift。接下来我们聊聊服务治理和DUBBO服务框架。最后总结一下如何在实际工作中选择合...

七月流星 563

泛微OA集成阿里云短信(E9保姆教程)

泛微OA集成阿里云短信(E9保姆教程)

技术分享 515

学Simulink——基于Simulink的AUTOSAR架构下电机控制软件组件建模

本文详细介绍了在Simulink中基于AUTOSAR架构开发电机控制软件组件(SWC)的全流程。主要内容包括:首先阐述了AUTOSAR架构对汽车电子系统开发的价值,包括提高软件复用率、降低集成成本和改善验证环境。然后重点讲解了在Simulink中构建电机控制SWC的具体步骤:从创建AUTOSAR组件模型、定义数据端口和服务端口,到搭建FOC控制算法、配置运行实体,最后生成AUTOSAR描述文件和验证RTE接口。文章还提供了与基础软件(BSW)的集成方案、工程实践要点和常见问题解决方案,并以大众MEB平台等实

amy_mhd的博客 66

系统间通信3:RPC的基本概念

本文引用 : https://yinwj.blog.youkuaiyun.com/article/details/49453303 1. 概述 经过了详细的信息格式、网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热。从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的讲解:RPC。在后续的几篇文章中,我们首先讲解RPC的基本概念,一个具体的RPC实现会有哪些基本要素构成,然后我们详细介绍一款典型的RPC框架:Apache Thrift。 2. PRC概述 2.1 什么是RPC RPC(Remote P

沈春旭的博客 2404

芒果YOLO11改进22:检测头Head篇:即插即用|《新颖高效AsDDet检测头》独一无二的结构改进,公开数据集mAP高效涨点,即插即用|检测头新颖改进,性能高效涨点,全网首发独一份

检测头Head篇:即插即用|《新颖高效AsDDet检测头》独一无二的结构改进,公开数据集mAP高效涨点,即插即用|检测头新颖改进,性能高效涨点,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 742

RPC概念理解

一、到底什么是RPC 最早的进程是各个进程内部各自完成自己的任务。但是随着发展,有时候需要将B进程的某个方法做成特定的工具类等,本地A进程调用B进程的该方法,于是就产生了IPC(Inter Process Communication本地进程间通信),这就是我们在操作系统里学到的进程间的共享内存的通讯方式。 后来随着分布式系统的出现,这个B进程就可能被搬移到了另一个服务器上,这就是RPC(remote procedure call,远程过程调用) 二、什么情况下使用 RP...

随手积累,典型bug解决。技术栈的系统介绍。 926

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

如何理解RPC

简述 远程过程调用(Remote Procedure Call,缩写为RPC),是一种用于构建基于C/S(客户端/服务器)的分布式应用程序技术。调用者与被调用者可能在同一台服务器上,也可能在由网络连接的不同服务器上,对于他们来说,网络通信是透明的,远程调用像本地调用一样简单。 理解 RPC就是要像调用本地函数一样去调用远程函数,要理解RPC,让我们先来看看如何完成一个本地函数的调用: ...

Just do it! 6816

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

什么是RPC

一个阳光明媚的早晨,老婆又在翻看我订阅的技术杂志。 “老公,什么是RPC呀,为什么你们程序员那么多黑话!”,老婆还是一如既往的好奇。 “RPC,就是Remote Procedure Call的简称呀,翻译成中文就是远程过程调用嘛”,我一边看着书,一边漫不经心的回答着。 “啥?你在说啥?谁不知道翻译成中文是什么意思?你个废柴,快给我滚去洗碗!” “我去。。。”,我如梦初醒,我对面坐着的可不是一个程序...

github_37882837的博客 8323

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: SQL关键字三分钟入门:DISTINCT —— 去重就这么简单
下一篇: 探索RPC通信的多样性:从Gob到HTTP-RPC与JSON-RPC
Tech小七
博客等级 码龄3年 1571粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值