你编过程序吧?你程序里有函数或方法间的调用吧?

比如你写了两个函数fa和fb,在fa里肯定可以调用fb,这个可以理解吧?好了,铺垫完了。接下来入正题: 别人写了个程序,程序里有个函数rf,而且这个程序是独立运行的。你自己写程序时想调用这个rf,怎么办?rpc就是为了解决这个问题而出现的技术。远程过程调用就是一种在两个原本相互独立的进程间建立一种类似于单个程序内函数间调用的函数调用机制。这样,不仅一个程序内的函数可以相互调用,不同程序间的函数也可以相互调用了。 至于用途,你可以从程序内函数调用的用途出发进行思考。首先是可以直接利用别的程序的部分功能,这是最基础的。更重要的,利用rpc可以实现系统的分布式架构,一方面有些功能比较相关应该放到一起实现,一方面物理因素的原因要求系统分解为多机实现,因此有的功能实现为了一个机器上的进程,而另外的功能实现为在另外机器上的进程,这两个进程间的协同和信息交互就可以通过rpc来实现。 另外,有些现成系统所设计的扩展方式就是要通过rpc实现,这时你就需要通过它所选择的rpc协议编程方式对原系统进行功能扩展

楼上说的没错,我也举个例子。你操作你自己电脑硬盘上的文件,是个方法,和访问网络上的文件,在使用上没什么区别,但实际实现上存在差异。大体的差异你肯定能理解。至少有各种网络协议吧。rpc就是类似的东西。说来说去,就是不同计算主体之间数据协同问题。无非传统编写程序,函数和函数之间的调用,数据的协同很容易,基本在你的代码设计时,就考虑到了数据空间的设计和调用,甚至没有这个概念,只有局部变量和全局变量的概念。而跨进程的相互协同运行,则就多了数据协同的问题。有同步也有异步,不过总有同步点

RPC,就是将数据序列化之后传递给接收的服务器,然后获取一个序列化后的返回值。

在网络通信中,不管是TCP 还是UDP,我们都要在传输层上设计自己的应用层协议,使得前后端的数据可以相互通信传输一个可以识别的内容。

后来,人们期望能够更方便一点地让前后端进行交互,于是提出了RPC,就像调用函数一样来让前后端来进行通信,屏蔽掉复杂的应用层协议。

什么是rpc及应用场景?的更多相关文章

  1. RPC 的概念模型与实现解析

    今天分布式应用.云计算.微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:) 全 ...

  2. RPC原理详解

    RPC 功能目标 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性. 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分 ...

  3. MicroService/web Service/webAPI/RPC

    [TOC] 微服务 服务拆分,利用轻量化机制(通常为HTTP源API)实现通信,复杂度可控,独立部署,技术选型灵活,容错,扩展. 康威定律的实际体现 微服务架构模式深刻影响了应用和数据库之间的关系,不 ...

  4. RPC远程过程调用协议

    最近学习Hadoop.Hbase.Spark及Storm原理,经常会出现RPC这样的传输术语,为了更好地理解,将知识点详细的整理下吧~ RPC-----它是一种通过网络从远程计算机程序上请求服务,而不 ...

  5. RPC介绍

    转载http://blog.csdn.net/mindfloating/article/details/39474123/ 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  6. 深入浅出 RPC - 浅出篇+深入篇

    摘自: http://blog.csdn.net/mindfloating/article/details/39473807 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  7. RPC进阶篇

    RPC实现结构拆解 RPC过程调用详解:RPC 服务端通过 RpcServer 去导出(export)远程接口方法,而客户端通过 RpcClient 去引入(import)远程接口方法. 客户端像调用 ...

  8. 深入浅出 RPC - 深入篇

    <深入篇>我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它? RPC 功能目标 RPC 的主要功能目标是让构建分布式 ...

  9. RPC 的概念模型与实现解析(转)

    今天分布式应用.云计算.微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:) 全 ...

随机推荐

  1. C# HTTP系列11 以普通文件流方式上传文件远程服务器

    系列目录     [已更新最新开发文章,点击查看详细] 应用程序中上传附件是最常使用的操作之一,ASP.NET客户端一般通过上传控件实现, <input type="file" ...

  2. 第26课 std::async异步任务

    一. std::async函数模板 (一)std::async和std::thread的区别 1. 两者最明显的区别在于async采用默认启动策略时并不一定创建新的线程.如果系统资源紧张,那么std: ...

  3. Nginx配置max_fails fail_timeout

    目的: 通过配置max_fails.fail_timeout来达到当一台服务器访问出现非200时可以跳转到另一台服务器 操作: 配置nginx.conf文件 具体配置如下 upstream Site ...

  4. python面试题第一份

    阅读目录 1 Python的函数参数传递 2 Python中的元类(metaclass) 3 @staticmethod和@classmethod 4 类变量和实例变量 5 Python自省 6 字典 ...

  5. 修!咻咻!团队Beta作业博客汇总

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...

  6. vertica 设置最大会话数

    默认会话数最大值55,如果超过了,就会报如下错误: com.vertica.support.exceptions.NonTransientConnectionException: [Vertica][ ...

  7. 我的周记8——"因为相信,所以看见"

    我没想明白过哪一种生活对幸福的定义更恰当,只是回顾我们走过的路,都是好春光,都像梦一场 JAVA学习视频 https://edu.aliyun.com/promotion/26?utm_content ...

  8. python网络爬虫(2)——scrapy框架的基础使用

    这里写一下爬虫大概的步骤,主要是自己巩固一下知识,顺便复习一下. 一,网络爬虫的步骤 1,创建一个工程 scrapy startproject 工程名称 创建好工程后,目录结构大概如下: 其中: sc ...

  9. LinQ in 写法

    有时候会碰到一个需求,又一堆id 1,2,3,4,循环遍历id再去数据库查不仅效率低,而且代码难看,可以用in来实现: string[] codes = item.ExamPaperCode.Spli ...

  10. 2019年,Golang开始吊打Java性能了!!!

    最近要同事debug性能,不经意间发现现在Golang性能开始吊打Java了!!!感觉Go发展神速!! 之前Go和Java基本是平手,甚至还有较大差距,请见https://www.cnblogs.co ...