【RPC研究】socket 函数调用

突然想深入学习一下RPC调用,研究一下发现这个东西相关联的东西还是比较多的,而且也算补齐一下别的知识。

接下来会写一下相关的知识,但没有什么参考资料基本都是博客看的,或者自己本科学的知识融合,并没有翻啥书,如果有不够精确的,评论区大神指出一下谢谢哈~。

好,首先先开始理解一下RPC作用是啥。全名远程过程调用。首先,远程,由于我自身相关,上课有听到老师说,RPC底层用的也是socket,所以直接开始先深入研究一下socket是个啥。其余也可以从远程这两个字眼联想到需要解决通信问题。

socket

上计网的时候有听过这个词,但当时没咋注意,就学了咋用,开一下server,了解一下就完事了,不是很关注。现在深入了解一下。

首先先说我自己的疑惑,socket是用来通信的,当时学计网也是拿来通信的他们有啥不一样啊?我用计网TCP/IP架构不也可以通信吗?

socket与计网里面TCP IP 不是一个东西。在计网里面学的东西是协议。而TCP IP是协议,他们是一种通信规则,根据这种通信规则能够让双方完成通信。

而socket是根据这些通信协议(TCP/UDP等)在计算机环境上层的实现,而这些环境包括了操作系统等等,也就是真正能够在当前计算机系统之上运行的。

所以网上也有很多问题在说socket跟HTTP有什么不同,理由也是跟上面是一样的。他们都不是一个类别下面的东西,没有什么好比的。

但有一个细节点,socket运用了计网学习的协议,能够让他保证自己有可靠性之类的东西。

好研究清楚不同,再思考一下在计算机环境之下socket目标如何实现。仔细推敲一下,我们在计算机上需要通信对象主要应该是程序吧。那么程序运行在操作系统之上作为进程进行运行。而进程在网络中的标识用的是端口吧,所以socket用的是运输层协议。并且用的是c/s的方式完成的。

这样其实socket就研究完了,总结一下实际上感觉可以归结为使用了tcp/udp通信协议并且运用cs模式实现进程之间的通信。

函数调用

解决socket,我们解决了远程这两个词,但过程调用还没解决。
RPC设计追求是,让调用别的计算机的函数能够像调用本机一样简单。所以他需要解决函数调用的问题。

那我们首先先研究一下,本机是如何实现函数调用的。主要是通过汇编与操作系统来理解。

首先先详细说一下执行过程。
计算机运行程序先加载到内存某个区域再进行执行。那么函数首先在声明时候,可以把他丢到一个特殊的代码段去吧,可以暂且把他理解为一个“函数段”地方去。然后记下来他被丢到的地方。
然后到调用函数函数的时候,再根据他的名字,改成jmp到那个函数段地址去。这样子就完成了函数调用。

所以根据上面叙述,最重要的就是函数被丢到了那个代码段去了吧,也就是函数的入口地址。他具体的段地址是多少,所以才可以调用吧。

但两个进程之间代码段是不一样的,那么如果需要调用函数就不知道该去哪,所以一般来说,如果进行RPC,两个进程之间会沟通好,那个函数的段地址是啥,这里面加上一个hash唯一映射一下就好了,他们尽量不重复就完事了。那么这样就可以解决不同进程之间调用函数的问题。

先理解到这里,后面研究一下细致的RPC源码。很好又挖了个坑笑死。

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

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

相关文章

[Repo Git] manifests的写法

​manifests​​是个啥 在Repo​中manifests​描述了Repo客户端的结构,也就是可以从manifests​中知道各个模块的代码应该从代码管理仓库当中哪个位置去获取。 ​manifests​的基本结构是一个Git存储库,在顶层目录中持有一个default.xml​文件。 由于m…

程序员想要搞钱不迷茫,这篇文章你可得码好啦!!!

年已经过完了,现在大家都已经返工返校了吧!咱又要投入到新一年的战斗了!春色恼人不等闲,相信咱都有一个实实在在的愿望和期许:身体健康,财源广进!新的一年我们还得继续努力,多多搞钱…

利用IP地址查防止电子招投标串标行为

随着信息技术的快速发展,电子招投标已成为政府和企业采购的主要方式。然而,电子招投标中的串标问题也愈发突出,给公平竞争和资源分配带来了隐患。为了防止串标行为,利用IP地址查已成为一种有效手段。 IP地址查询:IP数…

002_avoid_for_loop_in_Matlab避免使用for循环

避免使用for循环 在程序设计思想中,循环是一个很有力的工具。在循环中,计算机很轻松地重复执行相同的操作。循环是汇编之上的编程中最重要的概念之一。Matlab的循环有两个语言构造,一个是for循环,另一个是while循环。在Matlab中&…

Python实战:全局变量与局部变量

一、引言 在Python编程中,全局变量和局部变量是两种常见的变量类型,它们在代码的执行过程中扮演着重要的角色。理解全局变量和局部变量的概念、作用域和生命周期对于编写清晰、可维护的代码至关重要。本文将详细介绍Python中的全局变量与局部变量&#…

【Vue3笔记01】如何使用Vue3和Vite搭建前端项目的基础开发环境

这篇文章,主要介绍如何使用Vue3和Vite搭建前端项目的基础开发环境【知识星球】。 目录 一、搭建项目环境 1.1、前提条件 1.2、开始搭建 1.3、下载依赖

罗德与施瓦茨联合广和通全面验证RedCap模组FG132系列先进性能

近日,罗德与施瓦茨联合广和通完成Redcap(Reduce Capability)功能和性能验证。本次测试使用R&SCMX500 OBT(One Box Tester)无线通信测试仪,主要验证广和通RedCap模组FG132系列射频性能以及IP层吞吐量,包括RedCap上下行吞吐量和射频指标如矢…

【计算机网络篇】数据链路层(2)封装成帧和透明传输

文章目录 🥚封装成帧和透明传输🎈封装成帧🎈透明传输🗒️面向字节的物理链路使用字节填充的方法实现透明传输。🗒️面向比特的物理链路使用比特填充的方法实现透明传输。 🛸练习 🥚封装成帧和透…

css的transform详解

CSS的transform属性是一个功能强大的工具,允许你对HTML元素应用2D或3D转换效果,包括旋转、缩放、倾斜和移动等。以下是对transform属性中各种函数和参数的详细介绍: 2D转换函数: translate():该函数用于移动元素。它接…

洛谷P8218 【深进1.例1】求区间和 【前缀和】【一阶差分】【二阶差分】

文章目录 前缀和前缀和例题题意 差分差分例题及code↓模版例题输入样例:输出样例: code↓ 前缀和 前缀和定义: 前缀和数组的第 i i i 位即为原数组 1 1 1 ~ i i i 位的和 原数组: 1 2 3 4 5 前缀和数组&#xff1…

BGP聚合:

BGP聚合: 1、功能: 1.1 可以指向BGP邻居发送聚合后的路由条目,从而减少路由表项(优化); 1.2 如果明细路由产生震荡,那么聚合后的路由不受影响。 1.3 简化路由表项,达到节省设备资源…

Linux systemd详解

1、概念 1.1 systemd systemd 是一个用于管理 Linux 系统启动过程和系统服务的系统和服务管理器。它被设计为取代传统的 System V init 系统,提供了更快的启动时间、并行启动服务、更好的日志记录和更强大的管理功能。 1.2 unit Unit 是 systemd 中所有配置文件…

springboot接口跨域问题解决

1、实现WebMvcConfigurer接口package com.common.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigur…

基于ssm校园美食交流系统论文

目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10…

字符函数与字符串函数

目录 一.字符分类函数 二.字符转化函数 三.strlen函数 函数的介绍 strlen函数的模拟实现 1.计算器法 2.递归 三.指针-指针的方式 四.strcpy函数 函数介绍 strcmp的模拟实现 五.strcat函数 函数介绍 strcat的模拟实现 六.strcmp函数 函数介绍 返回值 strcm…

做项目的一些感悟

一、交接: 1.不交接好千万不要松口让对方走。 2.资料、文档、注释、账号密码、项目关联信息、项目源代码、交接人联系电话、等信息必须齐全完整。 3.如果项目有问题或者交接人与公司有纠纷,这个项目尽量不要接。 4.不要随意修改交接代码,…

Java中的包装类

Java中的包装类 一、包装类是什么?二、对应关系:三、举例说明:Integer构造器:包装类特有的机制:自动装箱 自动拆箱常用方法 总结 一、包装类是什么? 以前定义变量,经常使用基本数据类型&#x…

Mysql学习--深入探究索引和事务的重点要点与考点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

自动驾驶---Motion Planning之轨迹Path优化

1 背景 在之前的几篇文章中,不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》,ST图《自动驾驶---Motion Planning之Speed Boundary》,又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》,最终我们都是为了得到boundary的信息。 …

OpenCV实战:智能人脸识别打卡系统

1、介绍 目前,很多公司对员工的考勤同时通过打卡机或者钉钉之类的打卡软件,传统的员工打卡方式有很多,例如点名、签字、刷卡、指纹等等 然而随机机器视觉、计算机视觉的不断发展,算力的不断提升,人工智能对人脸检测的…