RPC(远过程调用)在分布式系统中是很常用的基础通讯方式,核心思想是将不同进程之间的通讯抽象为函数调用。
基本的过程是:
1、调用端将参数序列化到流中并发送给服务端
2、服务端从流中反序列化出参数并完成实际的处理
3、将结果序列化后返回给调用端。
通常的RPC由接口形式来定义,接口定义服务的名字,接口方法定义每个请求的输入参数和返回结果,并且RPC内部的序列化、网络通讯等实现细节则由框架来完成,对开发人员来说是完全透明的。
RPC结构的一个轻量级框架结构图:
根据上图的结构,描述一下rpc的详细过程:
一、启动过程
1、Rpc-server 负责启动rpc服务,服务启动时开始监听制定的端口号;
2、启动时将绑定服务处理的Handler(Rpc-Handler),以及Encoder类与Decoder类
3、启动后调用RpcRegister类的egister方法,将发现的Rpc服务注册到服务调度中心
二、 客户端同步调用过程
1、用户通过Proxy 类创建一个Rpc服务客户端;
2、再用胡调用Rpc服务时,Proxy调用Rpc-Client的send方法(在send方法中调用Encoder类进行序列化),将服务请求发送到Rpc-Server;
3、Rpc监听端口的服务收到请求后将服务转给Rpc-Handler来处理;
4、Rpc-Handler收到通知后先调用Decoder类进行反序列化,然后开启一个新的线程来处理客户端请求,请求处理完成之后,Handler直接相应给客户端;
5、客户端收到回应之后调用Decoder类进行反序列化,如果有异常就抛出,否则返回服务端的返回值
三、客户端异步调用过程
1、用户通过Proxy 类创建一个Rpc服务客户端;
2、再用胡调用Rpc服务时,Proxy调用Rpc-Client的call方法(在send方法中调用Encoder类进行序列化),将服务请求发送到Rpc-Server,请求发送完成后,客户端继续执行剩余业务逻辑;
3、Rpc监听端口的服务收到请求后将服务转给Rpc-Handler来处理;
4、Rpc-Handler收到通知后先调用Decoder类进行反序列化,然后开启一个新的线程来处理客户端请求,请求处理完成之后,Handler直接相应给客户端;
5、如果用户注册了回调函数,则客户端收到回应之后调用Decoder类进行反序列化,然后执行回调逻辑;如果没有注册回调函数,那么客户端发送完请求后就结束了
注:感谢各位网友贡献的源码,大部分源码都是使用别人的,本人只是在这基础上进行的部优化。
相关推荐
轻量级RPC框架是指在不引入过多复杂性的情况下,设计用于快速开发和部署分布式应用的框架。在这个场景中,我们将讨论如何利用Zookeeper、Socket和Java动态代理来构建这样一个框架。 Zookeeper是Apache Hadoop的一个...
标题中的“一款基于Netty+Zookeeper+Spring实现的轻量级Java RPC框架”揭示了这个项目的核心技术栈,它整合了三个在分布式系统中广泛使用的开源库:Netty、Zookeeper和Spring。让我们逐一深入探讨这三个技术以及它们...
2. **轻量级**:由于JSON-RPC的轻量级特性,它在网络传输中占用的带宽较少,这使得它在处理大量小规模请求时具有更高的性能。 3. **双向通信**:JSON-RPC支持客户端和服务器之间的双向通信,即可以由客户端发起调用...
在“rpc-Group.zip”这个压缩包中,"Group-master"可能是一个项目源码仓库的主分支,表明这个轻量级框架可能包含了与远程过程调用(RPC)相关的组件或服务。RPC使得在分布式系统中,程序可以像调用本地方法一样调用...
Sunyata是一个专门为Python语言设计的轻量级RPC(远程过程调用)框架,它允许开发者以一种简便的方式实现客户端和服务端之间的远程通信。该框架的特点在于它既可以进行直接的客户端到服务端的连接,也支持通过服务...
- **高性能**:Doge利用Python的异步IO能力,如asyncio库,实现了高并发处理,有效提高了系统吞吐量。 - **轻量级**:Doge框架设计简洁,易于理解和集成到现有项目中。 - **服务治理**:支持服务注册与发现,动态...
森林(forest)是一个基于Netty构建的轻量级、高性能的分布式RPC服务框架。这个框架的设计目标是简化RPC调用,提高服务之间的通信效率,并且提供了丰富的功能来应对分布式环境中的各种挑战。让我们深入探讨一下forest...
在计算机科学与技术领域,特别是对于人工智能专业的学生而言,设计一个基于Netty的轻量级、高性能分布式远程过程调用(RPC)框架,是一个极具挑战性的课题。Netty作为一个高性能的网络应用框架,广泛应用于需要高...
falcon作为轻量级框架,意味着它的设计和实现都是为了最小化资源消耗和提高性能。这通常体现在以下几个方面: 1. **简单API**:falcon提供简洁的API接口,使开发者能够快速理解和集成到项目中。 2. **小体积**:...
1. **casock框架**:casock是一个轻量级的RPC框架,旨在简化C++应用程序之间的通信。它的设计目标是提供高效、灵活且易于使用的接口,让开发者能够快速构建分布式系统。 2. **google protobuf**:protobuf是Google...
zerorpc是一个Python实现的轻量级RPC库,它基于msgpack作为序列化协议,而gevent是一个强大的事件驱动库,通过协程实现高效的并发。 首先,zerorpc是这个框架的核心组件,它提供了一种灵活且易于使用的接口来定义和...
我也算得上是在很多个互联网企业厮杀过,见过很多很多的内部RPC框架,有些优秀的设计让我非常赞赏,有一天我突然想着,为什么不对这些设计原型进行聚合归类,自己搞一套【轻量级】RPC框架呢,碍于工作原因,一直...
ZLToolKit是一个高效、轻量级的网络框架,它主要使用C++ 11语言进行开发,旨在为开发者提供高性能、低延迟的网络服务处理能力。这个框架的核心设计是利用线程池技术来处理大并发的网络I/O操作,以优化系统资源的使用...
SOFA Bolt 是阿里巴巴开源的一款基于 Netty 实现的轻量级、易用且高性能的远程处理框架。这款框架的设计目标是为分布式系统提供简单、高效的通信能力,适用于微服务架构中的服务间通信。在深入理解 SOFA Bolt 之前,...
虚拟线程是Java在Loom项目中提出的一种轻量级线程模型,它旨在解决传统线程模型在处理高并发I/O操作时的效率问题。虚拟线程由操作系统内核线程支持,但它们的数量可以远远超过内核线程的数量,因为虚拟线程的创建和...
JSON-RPC是一种轻量级的RPC协议,使用JSON作为数据交换格式,易于理解和实现。 3. **JSON协议**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在...
谷歌开源的leveldb是一款轻量级、高性能的键值存储库,常用于构建数据库、日志记录和缓存系统。它基于Log-Structured Merge Tree(LSMT)数据结构,提供顺序写入、随机读取的优秀性能。leveldb的引入可能与百度RPC...
Go语言天生适合网络编程,它的并发处理能力非常强大,拥有轻量级的协程(Goroutine),能够在单个操作系统线程上运行成千上万个协程,这对于处理大量并发请求非常有利。 此外,rpc(Remote Procedure Call,远程...