分布式项目学习笔记(二):本地服务发布成RPC服务

C++实现分布式网络通信框架RPC(2)——rpc发布端 上面的全部就是我们mprpc服务端的全部代码了,走到这里,我们应该对mprpc在服务端的这部分有了很深的了解了吧,最后我再做一个总结,从大局上说一下当用户发起rpc调用的时候,在服务端整个过程是什么样子的。首先,对于服务端来说,用户想要请求本端的某种服务下的某种方法的时候,这个服务及方法应该先由服务端发布成rpc方法。服务端先定义 .proto文件。 阅读详情

一、引言

分布式的布置决定了业务的不同功能可能放在不同的主机中。当一台主机A需要调用另一台主机B的方法时,则需要主机B提前将自己的本地服务发布成RPC服务。在这个过程中,主要需要做两件事:

  1. 主机A应该怎么调用这个接口(给出接口的使用方式)
  2. 主机B在接口里面具体实现了什么

二、具体实现

1. 主机A应该怎么调用这个接口(给出接口的使用方式)

首先需要主机B来创建一个 user.proto文件来注册本地业务的RPC方法:

syntax = "proto3";

package fixbug; 

option cc_generic_services = true;

message ResultCode {
    int32 errcode = 1;
    bytes errmsg = 2;
}

message LoginRequest {
    bytes name = 1;
    bytes pwd = 2; 
}

message LoginResponse {
    ResultCode result = 1;
    bool success = 2;
}
// 注册RPC方法
service UserServiceRpc {
    rpc Login(LoginRequest) returns(LoginResponse);
}

这里最关键的就是最后一段代码,它注册一个RPC方法:如果想调用我的登录方法,你就使用函数Login,参数是LoginRequest。返回是一个LoginResponse。

在定义RPC服务的名称以及函数接口(函数名字+参数类型)、返回类型之后。使用指令:

protoc user.proto --cpp_out ./ 

转化为C++类型的头文件 "user.pb.h",就可以拿来使用了。

三、主机B具体实现接口里面的内容

在注册了方法之后。主机B需要具体实现接口里面的内容:

#include <iostream>
#include <string>
#include "user.pb.h"

fixbug::ResultCode* 

class UserService : public fixbug::UserServiceRpc {
public:
    bool Login(std::string name, std::string pwd) {
        std::cout << "doing local service login" << std::endl;
        std::cout << "name:" << name << "pwd: " << pwd << endl;
        return true;
    }

    void Login(::PROTOBUF_NAMESPACE_ID::RpcController* controller,
                       const ::fixbug::LoginRequest* request,
                       ::fixbug::LoginResponse* response,
                       ::google::protobuf::Closure* done)
    {
        // 本地重写业务
        std::string name = request->name();
        std::string pwd = request->pwd();

        bool loginResult = Login(name, pwd);  // 做本地业务

        // 把响应写入
        response->set_success(loginResult);
        fixbug::ResultCode *code = response->mutable_result();
        code->set_errcode(0);
        code->set_errmsg("");

        // 执行回调  执行响应对象的序列化和网络发送,由框架完成
        done->Run();
    } 
}

这里的具体实现是主机B继承了UserServiceRpc 来实现接口里面的内容。第一个Login其实就是本地的方法,第二个带有很多参数调用了本地的来真正执行本地的操作。里面的参数其实就是RPC框架在网络中接收到的参数。

【C++项目】Rpc通信框架设计 在Linux环境下,基于C++、muduo库、json序列化/反序列化等技术实现一个简单的Rpc通信框架,这一篇主要介绍设计思路 阅读详情

相关推荐

361-本地服务如何发布成RPC服务?

我们开发的是一个框架类,侧重于给上层应用提供一个方便的方法,将上层应用的本地方法快速的部署成一个rpc方法,框架本身不做任何业务的,业务属于应用层面,框架属于平台层面!example文件夹作为我们框架项目的使用实例,在example文件夹下创建callee和caller两个文件夹。(example中的代码就相当于是 业务代码) 我在callee创建一个文件:userservice.cc现在我们的需求: 有没有这样一个框架,把这个UserService这个类生成的Login方法直接变成一个RPC远程方法?让在

Edward_LF的博客 225

泰岳区块链-传统应用如何和区块链交互(二)

上一篇文章已经写了RPC和SDK,接下来就是 区块链链外数据又如何上链呢? 其实这就要提到区块链里面的一个很重要的模块,EVM,智能合约。 那么先问: 1、什么是智能合约 通俗点讲,智能合约就是提前在链上部署的一段代码,代码是什么样的业务逻辑,由代码来定。规则定义好了,就不可以更改。因为区块链的智能合约会按原来的代码逻辑进行执行。另外,已经部署好的区块链智能合约无法更新。 那么泰岳区块链采用的智能合约运行环境是EVM。智能合约的语言采用的是solidity。当然其他链也有一些自己的虚拟机和脚本语

chhaozeng的专栏 777

【C++项目】从零实现RPC框架「二」:项⽬设计

本文概述了RPC分布式系统的设计,涵盖基本概念、服务注册发现机制及负载均衡,并详细介绍了服务端与客户端的功能模块,最后展示了系统的三层架构设计。

You build it, you run it 6152

实现一个简单的RPC本地调用

1.RPC简介 RPC的全称是Remote process Call,即远程过程调用。其实现包括客户端和服务端,即服务的调用方与服务的提供方。服务调用方发送RPC请求到服务提供方,服务提供方根据调用方提供的参数执行请求方法,将执行结果返回到调用方,一次 RPC调用完成。 2.代码部分 服务接口类 package com.rpc; /** * 服务接口定义 * @Descriptio...

LH9898的博客 3216

STM32F407编译下载全流程:从CubeMX到HEX烧录

嵌入式固件开发中,编译与下载是连接代码与硬件的关键闭环。其本质是将高级语言描述的逻辑,经交叉编译(ARM GCC)、链接(ELF生成)、格式转换(HEX/BIN)后,通过调试接口(SWD/UART)写入MCU Flash存储器的过程。该流程涉及工具链协同、二进制格式特性(如Intel HEX的地址映射与无元数据设计)、启动模式(System Memory Bootloader)、Flash选项字节(RDP/WRP)等底层机制,直接决定固件可运行性与安全性。典型应用场景包括STM32F407开发板调试、量产固

weixin_28840811的博客 259

Unity Tilemap瓦片动态缩放:保持网格尺寸不变的三种实现方案

本文详细探讨了在Unity中实现Tilemap瓦片动态缩放同时保持网格尺寸不变的三种核心方案。针对编辑器静态调整、整体风格化处理及运行时动态控制等不同场景,分别解析了直接修改瓦片属性、调整Tilemap Renderer材质参数以及使用SetTransformMatrix与Matrix4x4矩阵变换的实践方法、优缺点及选型指南,为2D游戏开发提供灵活高效的视觉与交互解决方案。

grass的博客 626

从头创建一个简单的RPC服务框架

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。本文将介绍如何搭建一个简单的RPC服务框架。

xktxoo的博客 3778

深入解析高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计

本文深入解析了高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计,详细介绍了Adreno DPU的核心模块组成、显示接口设计以及DRM驱动架构。通过实际案例和调试技巧,帮助开发者理解硬件与软件的协同工作原理,优化显示性能并解决常见问题。

weixin_29266679的博客 436

分布式网络通信框架:本地服务怎么发布成RPC服务

protobuf为我们提供了该参数done,该类型是Closure。

Sauron7i的博客 918

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3295

手把手教你用CANopen SDO报文控制步进电机(附CIA402协议详解)

本文详细解析了如何通过CANopen SDO报文控制步进电机,深入讲解CIA402协议的核心架构、状态机模型及对象字典管理,并提供实战代码示例。从SDO报文构造到多轴同步控制,帮助开发者掌握工业级步进电机的精确控制技术,适用于自动化设备开发。

weixin_33737774的博客 485

RPC分布式网络通信框架项目

RPC分布式网络通信框架项目详解

weixin_45029883的博客 2839

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 519

RPC服务

RPC服务 1.rpc是什么: RPC(Remote Procedure Call)是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简单的理解是一个节点请求另一个节点提供的服务 RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先

李建国的博客 1万+

12S BMS 核心设计:基于 STM32H743+BQ34Z100 的 SOC/SOH 实现与全链路技术解析(上)

本文详细介绍了基于STM32H743和BQ34Z100的12串锂电池管理系统(BMS)设计。该系统采用主控制器+专用电量监测计架构,可实现高精度SOC(±1%)和SOH(±2%)估算,支持36V-50.4V电压范围。硬件设计包括电压/电流采样、温度测量、保护电路等模块,软件实现基于HAL库开发,采用DMA方式提高I2C通信效率。系统通过TI专利的ImpedanceTrack™算法实现三维融合估算,并具备完善的保护功能。该设计适用于电动工具、轻型电动车等中功率设备,具有精度高、响应快。

bother3000的博客 1392

YOLOv11涨点改进| SCI一区2026 |独家创新首发、特征融合改进篇|引入FAFM特征对齐融合模块,通过特征对齐和融合两个阶段,助力多模态融合小目标检测,小目标检测,SAR图像目标检测高效涨点

🔥本文提出了一种改进YOLOv11网络模型的方法,通过引入FAFM(特征对齐融合模块)来解决多模态目标检测中的特征空间错位问题。FAFM模块采用可变形卷积和内容引导注意力机制,有效实现了跨模态特征对齐与融合,充分利用了不同模态间的互补信息。该方法在保持模型轻量化的同时,显著提升了目标检测精度和鲁棒性,特别是在复杂背景和模态差异较大的场景下表现突出。文章详细介绍了FAFM模块的结构、原理、优势,并提供了完整的代码实现和模型配置方案,为多模态目标检测任务提供了实用的技术参考。

Ai缝合怪、助力小伙伴高效发论文 267

【C++从零实现Json-Rpc框架】第五弹——理解项目功能

本文对Rpc项目的三个功能:rpc调用、服务的注册与发现以及服务的下线/上线通知、消息的发布订阅进行了讲解

麦麦的博客 2037

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

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

【Json-Rpc #3】项目设计

实现思想也并不复杂,也就是在原来的模型基础上,增加一个注册中心,基于注册中心不同的服务提供服务器向注册中心进行服务注册,相当于告诉注册中心自己能够提供什么服务,而客户端在进行远端调用前,先通过注册中心进行服务发现,找到能够提供服务的服务器,然后发起调用。⚗️本质上来讲,我们要实现的 rpc(远端调用) 思想上并不复杂,甚至可以说是简单,其实就是客户端想要完成某个任务的处理,但是这个处理的过程并不自己来完成,而是,将请求发送到服务器上,让服务器来帮其完成处理过程,并返回结果,客户端拿到结果后返回。

island1314的博客 2053

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RPC分布式通信(5)--发布 RPC 服务、处理客户端调用请求

首先通过 Protobuf 定义 RPC 服务的接口(.proto文件),这是 RPC 框架的「接口契约」,确保客户端和服务端数据格式一致。// 登录请求参数// 登录响应结果// 错误码:0=成功,非0=失败// 错误信息// 是否登录成功// RPC服务定义(必须继承google::protobuf::Service)// 登录方法编译后会生成和消息类;抽象服务类(继承服务发布核心:通过 Protobuf 定义接口→实现本地业务逻辑→注册到框架→Run启动服务 + ZK 注册。

wt20050610的博客 1090

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RPC框架:从原理到选型,一文带你搞懂RPC

而 Spring Cloud 就像品牌机,在 Spring Source 的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。Spring Cloud 基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。

daobuxinzi的博客 6万+

【项目】分布式Json-RPC框架 - 项目设计

本文介绍了分布式Json-RPC项目的项目功能、模块划分与框架设计。

2301_80277275的博客 1145

Json-Rpc框架(项目设计 —— 服务端&客户端 模块功能划分简介)

我们将深入剖析Json-Rpc框架中服务端与客户端的模块划分策略,我们将从服务端的功能定位,到客户端的请求发送、响应处理,揭示每个模块背后的设计思路与技术实现。通过这一系列的探讨,我期望能为读者呈现一个清晰、完整且高效的Json-Rpc框架设计蓝图,为实际项目中的RPC应用提供有力参考。

Yawesh的博客 1214

【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备

本文主要介绍了分布式Json-RPC项目是什么,并且介绍了完成这个项目需要学习的一些前置知识,如JsonCpp、Muduo、C++11异步操作

2301_80277275的博客 1449

分布式网络通信框架(1) 本地服务发布成RPC服务

本地服务如何发布成rpc服务

weixin_44144703的博客 343

RPC 框架

学习记录

学习记录 3757

【Json-Rpc框架】项目设计——理解项目功能

Jons_rpc总体框架

qq_74276498的博客 897
上一篇: Leetcode44: 通配符匹配
下一篇: VScode配置GItbash为终端
zsiming
博客等级 码龄7年 43粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值