快速了解Go+rpc

更多个人笔记:(仅供参考,非盈利)
gitee: https://gitee.com/harryhack/it_note
github: https://github.com/ZHLOVEYY/IT_note

文章目录

    • rpc基础概念
    • GO的rpc应用
      • 简单编写
      • json编写rpc

rpc基础概念

电商系统迅速发展后,有很多服务需要拆分,比如用户服务,商品服务,支付服务,订单服务,售后服务等 这些服务之间的相互调用就需要使用rpc

rpc框架:
在这里插入图片描述

服务注册中心:负责本地服务发布为远程服务,管理提供给消费者
消费者:通过远程代理对象调用远程服务
服务提供者:提供接口和相关服务

rpc框架可以跨语言,协议私密,传输效率也很高

GO的rpc应用

官方的net/rpc包对于方法有定义要求符合:

func (t *T) MethodName (argType T1, replyType *T2) error

其中T,T1,T2需要被encoding/gob包序列化(就是说不同编码器都需要适用)
第一个参数是调用者需要传递的参数
第二个是会以字符串方式返回的结果

简单编写

服务端: go run server.go运行就行

package mainimport ("fmt""net/http""net/rpc"
)type Args struct { //定义传入参数结构X, Y int
}type Algorithm int //就是一个辅助的定义func (t *Algorithm) Sum(args *Args, reply *int) error { //定义方法*reply = args.X + args.Yfmt.Println("Exec Sum ", reply)return nil
}func main() {algorithm := new(Algorithm) //分配内存空间指针同时分配内存初始化为0值fmt.Println("algorithm start", algorithm)//注册服务rpc.Register(algorithm)rpc.HandleHTTP() //将 RPC 服务挂载到 HTTP 服务器err := http.ListenAndServe(":8081", nil)if err != nil {fmt.Println("err=====", err.Error())}
}
  • 定义传入的结构体参数
  • 为了调用方法,定义相关结构体承载
  • 实例化对应的承载结构体
  • 注册服务,并注册到HTTP上
  • 启动端口监听

客户端: 终端开启运行 go run xxx.go 1 2 (后面的1和2是制定的参数传入)

package mainimport ("fmt""log""net/rpc""os""strconv"
)type Args struct { //定义传入参数结构X, Y int
}type Algorithm int  //就是一个辅助的定义func (t *Algorithm) Sum(args *Args, reply *int) error {*reply = args.X + args.Yfmt.Println("Exec Sum ", reply)return nil
}func main() {//连接服务器client, err := rpc.DialHTTP("tcp", "127.0.0.1:8081")if err != nil {log.Fatal("dailHTTP发生错误", err)}//获取第一个输入i1, _ := strconv.Atoi(os.Args[1])//获取第二个输入i2, _ := strconv.Atoi(os.Args[2])args := Args{i1, i2}var reply int//调用远程方法err = client.Call("Algorithm.Sum", args, &reply) //调用对应的方法if err!= nil {log.Fatal("调用远程方法发生错误", err)}fmt.Printf("Arith: %d+%d=%d\n", args.X, args.Y, reply)
}
  • 连接对应的服务
  • 输入,组成结构体
  • 通过Call 调用对应的方法并进行传递

json编写rpc

  • 标准 RPC:主要用于 Go 程序之间通信,用Gob进行二进制编码
  • JSON-RPC:适合跨语言通信(因为 JSON 是通用格式),用json进行编码
    jsonrpc更加通用,,二者的实际使用其实就是启动方式时函数调用上的区别,先不重复展开

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于大模型的膀胱肿瘤全周期诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、大模型预测膀胱肿瘤的原理与技术基础 2.1 大模型介绍 2.2 预测原理 2.3 技术支撑 三、术前风险预测与准备方案 3.1 肿瘤分期与恶性程度预测 3.2 患者身体状况评估 3.3 术前准备工作 …

2025年4月个人工作生活总结

本文为 2025年4月工作生活总结。 研发编码 一个项目的临时记录 自2月份领导让我牵头负责一个项目起,在本月算是有较多时间投入——但也是与之前的相比。 月初,清明节前一晚上,因某事务被叫上参加临时紧急远程会议,几方领导都在…

Python爬虫实战:获取软科网最新特定专业大学排名数据并做分析,为高考填报志愿做参考

一、引言 在高考升学的重要阶段,志愿填报成为考生和家长关注的核心问题。准确、全面且具有权威性的大学专业排名数据,是考生做出科学志愿决策的关键依据。软科网作为专业的大学排名信息发布平台,其发布的计算机科学与技术专业排名数据,因具有较高的公信力和参考价值,备受…

自学S32k144(18)————芯片锁死问题及成功解锁流程

1.锁死原因 温度过高flash异常操作静电等电压异常问题。。。。 本人出现情况:之前开发板不知什么原因,发生短路,重新置换芯片后,发现芯片在S32DS中无法正常烧录 判断可能是由于焊接时温度过高导致锁死。需解锁芯片。 2.解决方法…

ISIS的由于L1产生的一系列问题

如果有些名词不清晰可以查看之前文章 L1访问其他区域使用缺省路由会引发次优路径问题,但次优路径leak路由又会引发路由环路问题,下面将会从去缺省路由到路由环路一一解决 Level 1的缺省路由 L1访问其他区域使用缺省路由 --> 引发次优路径 --> 引…

C++继承(下)

目录 一、继承与友元 二、继承与静态成员 三、菱形继承及菱形虚拟继承 1. 继承的方式 2. 菱形继承的问题 3. 菱形虚拟继承 4. 虚拟继承解决数据冗余和二义性的原理 4.1 普通菱形继承的内存布局 4.2 虚拟继承的内存布局 四、继承的总结和反思 1. 多继承的复杂性 2.…

【漫话机器学习系列】233.激活阈(Threshold Activation)

深度学习入门:了解“阈值激活函数”(Threshold Activation Function) 激活函数是神经网络中至关重要的一环。今天,我们通过一幅简单直观的手绘图,一起理解最早期也最基础的激活函数之一 —— 阈值激活函数(…

(4)python中jupyter lab使用python虚拟环境

1. 先了解IPython和IPyKernel简介 IPython 是一个功能强大的交互式 Python 解释器和开发环境。它提供了一种增强的 Python Shell,使得用户能够以交互的方式探索、分析和可视化数据。IPython 的名称来源于 "Interactive Python",体现了其交互式的特性。 IPyKernel 是…

nginx 配置要领

你提出的问题非常好!确实在配置 WebSocket 代理时,proxy_pass 的 URL 处理需要特别注意。以下是关键解释和修正建议: 1. 原配置的问题分析 location /ws/ {proxy_pass http://fastapi-container:8000; # 会保留 /ws/ 前缀传递给后端 }这种配…

【AI】DeepSeek 流程图 / 时序图制作,Word 排版错乱问题,文字转直观图形

一:动态流程图 / 时序图制作(DeepSeek Draw.IO) 工具准备 DeepSeek(AI 生成代码):官网(免费)Draw.IO(可视化渲染):官网(免费&#…

4. python3基本数据类型

Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典) Pyt…

WPF之TextBox控件详解

文章目录 1. TextBox概述2. 基本属性与功能3. 输入控制详解3.1 MaxLength3.2 AcceptsReturn3.3 AcceptsTab3.4 CharacterCasing3.5 IsUndoEnabled3.6 自定义输入限制 4. 文本选择与操作4.1 选择属性4.2 选择方法4.3 文本操作4.4 选择事件4.5 实现自定义文本处理功能 5. 滚动支持…

1.4 点云数据获取方式——结构光相机

图1-4-1结构光相机 结构光相机作为获取三维点云数据的关键设备,其工作原理基于主动式测量技术。通过投射已知图案,如条纹、点阵、格雷码等,至物体表面,这些图案会因物体表面的高度变化而发生变形。与此同时,利用相机从特定

【MATLAB第118期】基于MATLAB的双通道CNN多输入单输出分类预测方法

【MATLAB第118期】基于MATLAB的双通道CNN多输入单输出分类预测方法 一、双通道CNN简介 在深度学习领域,卷积神经网络(CNN)凭借其强大的特征提取能力,已成为图像识别、自然语言处理等任务的核心技术。传统单通道CNN在处理单一模态…

2025上海车展 | 移远通信推出自研NG-eCall QuecOpen方案,助力汽车安全新标准加速落地

4月29日,在2025上海国际汽车工业展览会期间,全球领先的物联网和车联网整体解决方案供应商移远通信宣布,正式发布自主研发的NG-eCall(下一代紧急呼叫系统)QuecOpen解决方案。 该方案凭借高度集成的软硬件协同设计&…

leetcode76

目录 803ms超时。。。。越改越超时。。。 一些纠缠 代码分析: 代码问题: 改进建议: 示例代码: The error message you’re seeing indicates that there is a reference binding to a null pointer in your code. This typ…

大数据应用开发和项目实战-Seaborn

一、Seaborn概述 Seaborn是基于Python数据可视化库Matplotlib开发的扩展库,专注于统计图形的绘制,旨在通过简洁的代码实现复杂数据的可视化,帮助用户更轻松地呈现和理解数据。其核心设计目标是简化统计可视化流程,提供高级接口和美…

数据科学与计算

Seaborn的介绍 Seaborn 是一个建立在 Matplotlib 基础之上的 Python 数据可视化库,专注于绘制各种统计图形,以便更轻松地呈现和理解数据。 Seaborn 的设计目标是简化统计数据可视化的过程,提供高级接口和美观的默认主题,使得用户…

深入浅出循环神经网络(RNN):原理、应用与实战

1、引言 在深度学习领域,循环神经网络(Recurrent Neural Network, RNN)是一种专门用于处理**序列数据**的神经网络架构。与传统的前馈神经网络不同,RNN 具有**记忆能力**,能够捕捉数据中的时间依赖性,广泛应…

广州创科——湖北房县汪家河水库除险加固信息化工程

汪家河水库 汪家河水库位于湖北省房县,建于1971年,其地利可谓是天公之作,东西二山蜿蜒起伏,山峰相连,峰峰比高,无有尽头,东边陡峭,西边相对平坦,半山腰有一条乡村道路&am…