Rpc服务的提供方(Rpcprovider)的调用流程

首先,服务的提供方,会通过rpcprovider向rpc服务方注册rpc服务对象和服务方法,

那么,我们通过protobuf提供的抽象层的service和method,将服务对象和它所对应的服务方法记录在map表中,

当它启动以后,这里面相当于启动了一个epoll+多线程的服务器,

启动以后就可以接收远程的连接,远程如果有新连接过来的话,muduo库会帮我们回调onconnection(如果有客户端断开,服务端收到了,将相应的连接shutdown,释放socket资源)

onmessage等待远程rpc的调用请求,数据过来之后,按我们协商好的数据格式解析,最终解析出service_name、method_name和方法调用参数等数据,从抽象层动态的生成method的请求(request)和响应(response),将参数填到请求中(反序列化)

response由业务来填

再生成一个回调,

然会在框架上调我们业务的方法,

然后业务中login方法就会被调用(从请求中拿数据、做本地业务、给response填响应消息、执行回调)

在这个回调中调用我们绑定的方法,

绑定的方法做的是将响应进行一个序列化,然后通过网络发送回去,发送回去后,我们由rpc的提供者主动关闭这条连接,省资源,给其它rpc客户端再继续提供服务

结合muduo和protobuf,可以用很少的代码将这个框架的一部分,可以借助rpcprovider类来发布一个本地服务,将本地服务发布成一个支持rpc调用的远程服务

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

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

相关文章

Qt之饼图(Pie Graph)

[TOC](Qt之饼图(Pie Graph)) 饼图名为Pie Graph,用于显示一个数据系列中各项的大小与各项总和的比例。本文基于QtCharts实现饼图的显示。 1.实现过程 1.1环境配置 (1)首先想要使用QtCharts模块,需要在安装qt时选择勾选安装QtCha…

【名企专访】|格行自有格行的骄傲,格行骄傲在哪?格行随身wifi火爆出圈的真实内幕!

最近刷视频在一个随身wifi的帖子下边看到,有个网友这样回复:“随身wifi行业真的该整治了,到处是跑路的,夸大宣传的,本来在线上买就是图个方便,现在搞得不敢买。本来利民的产品,被搞得乌烟瘴气&a…

甄选范文“论云上自动化运维及其应用”,软考高级论文,系统架构设计师论文

论文真题 云上自动化运维是传统IT运维和DevOps的延伸,通过云原生架构实现运维的再进化。云上自动化运维可以有效帮助企业降低IT运维成本,提升系统的灵活度,以及系统的交付速度,增强系统的可靠性,构建更加安全、可信、开放的业务平台。 请围绕“云上自动化运维及其应用”…

windows 10 安装tcping 使用教程

1 官网下载:tcping下载 2 复制tcping 到win10系统目录C:\Windows\System32 3 tcping 网址测试,可以指定端口 4 tcping 测试端口联通 5 tcping http模式

【原创图解 算法leetcode 146】实现一个LRU缓存淘汰策略策略的数据结构

1 概念 LRU是Least Recently Used的缩写,即最近最少使用,是一种常见的缓存淘汰算法。 其核心思想为:当内存达到上限时,淘汰最久未被访问的缓存。 2 LeetCode LeetCode: 146. LRU缓存 3 实现 通过上面LRU的淘汰策略可知&#…

【多维动态规划】Leetcode 221. 最大正方形【中等】

最大正方形 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。 示例 1: 输入:matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“…

程序中的Reduce(CPU和GPU)

前提 最近在看Reduce(归约)的相关知识和代码,做个总结。这里默认大家已经明白了Reduce的基础概念。 Reduce 根据参考链接一,Recude常见的划分方法有两种: 相邻配对:元素和它们相邻的元素配对 交错配对…

【Mybatis】Mybatis初识-通过源码学习执行流程

文章目录 1.Mybatis核心组件1.1 SqlSession1.2 SqlSessionFactory1.3 Mapper1.4 MappedStatement1.5 Executor 2. Mybatis各组件之间关系3. 构建SqlSessionFactory3.1 从XML文件中构建3.2 不使用XML构建SqlSessionFactory 4. 如何从SqlSessionFactory获取SqlSession5.获取Mappe…

【AMBA】APB总线的个人学习记录(一):理论知识

精通APB (Advanced Peripheral Bus) 总线设计通常意味着你不仅理解其基础概念,而且能够在实际的硬件设计中灵活运用APB总线,解决复杂问题,并优化设计。以下是一些关键点,当你掌握这些方面时,可以说你对APB总线设计有了…

《昇思25天学习打卡营第6天|onereal》

Vision Transformer(ViT)简介 近些年,随着基于自注意(Self-Attention)结构的模型的发展,特别是Transformer模型的提出,极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩…

[OtterCTF 2018]Bit 4 Bit

我们已经发现这个恶意软件是一个勒索软件。查找攻击者的比特币地址。** 勒索软件总喜欢把勒索标志丢在显眼的地方,所以搜索桌面的记录 volatility.exe -f .\OtterCTF.vmem --profileWin7SP1x64 filescan | Select-String “Desktop” 0x000000007d660500 2 0 -W-r-…

数据库系统概论(第5版教材)

第一章 绪论 1、数据(Data)是描述事物的符号记录; 2、数据库系统的构成:数据库 、数据库管理系统(及其开发工具) 、应用程序和数据库管理员; 3、数据库是长期存储在计算机内、有组织、可共享的大量数据的集合&…

带上作弊器,我不得起飞

前言 过去,我们对人工智能既期待又害怕.人类的惰性希望人工智能可以帮助大家从大部分繁重的工作中解放出来,但又害怕它失控. 智能系统的好处 工作方面 自动化与效率提升:可以自动执行许多重复性和低技能的任务,如制造业中的装配、数据输入和办公室的客户…

原子变量原理剖析

一、原子操作 原子操作保证指令以原子的方式执行,执行过程不被打断。先看一个实例,如下所示,如果thread_func_a和thread_func_b同时运行,执行完成后,i的值是多少? // test.c static int i 0;void thread…

多表执行嵌套查询,减少笛卡尔积,防止内存溢出

问题:当涉及四个表的查询时,会产生大量的笛卡尔积导致内存溢出。 解决办法 :可以使用嵌套查询将多表的联合查询拆分为单个表的查询,使用resultmap中的association(适合一对一) 或 collection(一…

医院消防设施设备管理系统

医院为人员密集场所,且多为各类病患及其陪护人员,一旦发生火灾,人员疏散逃生困难,容易造成较严重的生命与财产损失。为规范医院的消防设施设备管理,通过凡尔码系统对医院消防设施设备进行信息化管理,提高医…

MapReduce学习

目录 7.3 MapReduce工作流程 7.3.1 工作流程概述 7.3.2 MapReduce各个执行阶段 7.3.3 Shuffle过程详解 1. Shuffle过程简介(过程分为Map端的操作和Reduce端的操作) 2、Map端的Shuffle过程: 3、在Reduce端的Shuffle过程 7.4 实例分析&am…

使用supportFragmentManager管理多个fragment切换

android studio创建的项目就没有一个简单点的框架,生成的代码都是繁琐而复杂,并且不实用。 国内的页面一般都是TAB页面的比较多,老外更喜欢侧边菜单。 如果我们使用一个activity来创建程序,来用占位符管理多个fragment切换&…

五、Spring IoCDI ★ ✔

5. Spring IoC&DI 1. IoC & DI ⼊⻔1.1 Spring 是什么?★ (Spring 是包含了众多⼯具⽅法的 IoC 容器)1.1.1 什么是容器?1.1.2 什么是 IoC?★ (IoC: Inversion of Control (控制反转))总…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符: and or not 1.案例一 需求: 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求: # 1. 获取用户输入的用户名和密码 # 2. 判断…