首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    手写了一个RPC框架

    这时就不得不提RPC框架了(Remote Procedure Call,远程过程调用)。他帮我们屏蔽了网络通信,序列化等操作的实现,真正做到了调用远程服务和调用本地服务一样方便。...知名的RPC框架有Spring Cloud,阿里巴巴的Dubbo,Facebook的Thrift,Google grpc等 RPC的调用过程 一个RPC调用的过程如下 调用方发送请求后由代理类将调用的方法...,参数组装成能进行网络传输的消息体 调用方将消息体发送到提供方 提供方将消息进行解码,得到调用的参数 提供方反射执行相应的方法,并将结果返回 下面我们就分析一下rpc框架是怎么实现的?...为了让大家有一个更形象的认识,我写了一个github项目,由简到难实现了一个rpc框架,欢迎star https://github.com/erlieStar/simple-rpc 生成代理类 前面我们说过...因为数据是以二进制的形式在网络中传输中,RPC的请求数据并不是以一个整体发送到提供方的,而是可能被拆分成多个数据包发送出去,那提供方怎么识别数据呢?

    42630

    项目推荐 I 手写RPC框架(二)

    前言 RPC框架代码量较多,将仅对核心过程进行梳理,完整代码见:https://github.com/wdw87/wRpc 在这篇推文中,将实现Rpc的远程通信。...远程通信是 RPC 的根本,本 RPC 框架还是采用 Netty 来作为通信框架。 在本项目的系统推文中,将对项目进行详细的介绍。...主要将按照下面的内容进行分配(蓝色字体可戳): 手写RPC框架(一) RPC简介、技术栈介绍、测试Demo 手写RPC框架(二) 远程通信实现 手写RPC框架(三) 制定协议与编解码器、动态代理 手写RPC...框架(四) 注册中心 Rpc框架示意图 四、实现远程通信 远程通信是 RPC 的根本,本 RPC 框架还是采用 Netty 来作为通信框架。...下面就先介绍该 RPC 框架的实现: 完整代码见:https://github.com/wdw87/wRpc 1. 服务端 服务端负责接收客户端的请求,并做出响应。

    41011

    项目推荐 I 手写RPC框架(四)

    前言 关于手写RPC框架的推文接近尾声了!大家一起撒花庆祝,动手实践起来吧!...RPC框架代码量较多,将仅对核心过程进行梳理,完整代码见:https://github.com/wdw87/wRpc 在这篇推文中,将介绍注册中心相关的内容。...主要将按照下面的内容进行分配(蓝色字体可戳): 手写RPC框架(一) RPC简介、技术栈介绍、测试Demo 手写RPC框架(二) 远程通信实现 手写RPC框架(三) 制定协议与编解码器、动态代理 手写RPC...框架(四) 注册中心 Rpc框架示意图 七、注册中心 我们已经梳理过了RPC框架所要实现的主要部分,还剩下最后一个问题:客户端如何得知服务所在的具体服务器?

    36320

    手写RPC框架--整体思想及其原理

    1.RPC通信原理在 RPC 框架中,最关键的就是理解“桩”的实现原理,桩是 RPC 框架在客户端的服务代理,它和远程服务具有相同的方法签名,或者说是实现了相同的接口。...客户端在调用 RPC 框架提供的服务时,实际调用的就是“桩”提供的方法,在桩的实现方法中,它会发请求的服务名和参数到服务端,服务端的 RPC 框架收到请求后,解析出服务名和参数后,调用在 RPC 框架中注册的...把接口定义的尽量通用,让接口定义与接口的使用方无关,这个接口的实现就很容易被复用,比如我们这个例子中网络传输和序列化这两部分代码,不仅可以用在这个 RPC 框架中,同样可以不做任何修改就用在其他的系统中...像 gRPC 这类多语言的 RPC 框架,都是在编译 IDL 的过程中生成桩的源代码,再和业务代码,使用目标语言的编译器一起编译的。...而像 Dubbo 这类没有编译过程的 RPC 框架,都是在运行时,利用一些语言动态特性,动态创建的桩。RPC 框架的这种“桩”的设计,其实是一种动态代理设计模式。

    30200

    21-基于Netty 手写Dubbo RPC

    RPC 基本介绍 RPC(Remote Procedure Call)-- 远程过程调用, 是一个计算机通信协议, 该协议允许运行于一台计算机的程序调用另一台计算机的子程序, 而程序员无需额外的为这个交互过程编程...两个或多个应用程序都分布在不同的服务器上,他们之间的调用都像是本地方法调用一样(如图) 常见的RPC框架有: 比较知名的阿里的Dubbo,Nacos,Google的gRpc, Go语言的rpcx,...Apache的thrift, Spring的SpringCloud(Eureka) RPC调用流程图 术语说明: 在RPC中, Client端叫做服务消费者, Server端叫做服务提供者 RPC...的目标就是将2-8这些步骤都封装起来, 用户无需关心这些细节, 可以像调用本地方法一样即可完成远程服务的服务调用 基于Netty 实现Dubbo RPC 需求说明 Dubbo底层使用了Netty作为网络通讯框架..., 要求用Netty实现一个简单的RPC框架 模仿Dubbo, 消费者和提供者约定接口和协议, 消费者远程调用提供者服务, 提供者返回一个字符串, 消费者打印提供者返回的数据, 底层通讯使用Netty

    51720

    项目推荐 I 手写RPC框架(三)

    前言 RPC框架代码量较多,将仅对核心过程进行梳理,完整代码见:https://github.com/wdw87/wRpc 在这篇推文中,将介绍协议的制定与编解码,以及动态代理相关内容。...主要将按照下面的内容进行分配(蓝色字体可戳): 手写RPC框架(一) RPC简介、技术栈介绍、测试Demo 手写RPC框架(二) 远程通信实现 手写RPC框架(三)制定协议与编解码器、动态代理 手写RPC...框架(四)注册中心 Rpc框架示意图 五、制定协议与编解码 完整代码见:https://github.com/wdw87/wRpc 1....RPC是一种小数据量,高并发的场景,显然HTTP协议不适合本场景。...在 RPC 中代理一般都使用的是动态代理,它代理的是服务的接口,用来解决客户端无法访问不同地址的对象问题。

    32920

    项目推荐 I 手写RPC框架(一)

    在这篇推文中,小媛将为大家推荐一个Java项目——手写RPC框架。...前言 RPC框架代码量较多,将仅对核心过程进行梳理,完整代码见:https://github.com/wdw87/wRpc 在这篇推文中,将对项目本身以及技术栈进行进行简单介绍,并且给出框架测试Demo...主要将按照下面的内容进行分配: 手写RPC框架(一) RPC简介、技术栈介绍、测试Demo 手写RPC框架(二) 远程通信实现 手写RPC框架(三) 制定协议与编解码器、动态代理 手写RPC框架(四)...注册中心 一、什么是RPC RPC(Remote Procedure Call)即远程过程调用,是一种计算的通讯框架。...RPC框架有很多,例如阿里的Dubbo,谷歌的gRPC等 一个简单的RPC框架主要涉及如下内容 动态代理 反射 序列化和反序列化 编码与解码 网络通信 服务注册与服务发现 ...

    1.1K10

    为了带你搞懂RPC,我们手写了一个RPC框架

    如今分布式系统大行其道的年代,RPC 有着举足轻重的地位。风靡的 Duboo、Thrift、gRpc 等框架各领风骚,深入了解RPC是新手也是老鸟的必修课。你知道 RPC 的实现原理吗?...想动手实现一个简单的 RPC 框架吗?...本文将通过一个 RPC 项目带你寻找答案,大量代码展示,干货满满,如果你能再钻研该项目代码,相信你能收获到包括不限于 RPC 原理、Java 基础(注解、反射、同步器、Future、SPI、动态代理)、...RPC原理 让我们回到 RPC 最初的目的,要想实现调用远程方法像调用本地方法一样简单,至少要解决如下问题: 如何获取可用的远程服务器 如何表示数据 如何传递数据 服务端如何确定并调用目标方法 上述四点问题...笔者将通过一个简单 RPC 项目来解决这些问题。

    1.2K71

    为了带你搞懂RPC,我们手写了一个RPC框架

    如今,分布式系统大行其道,RPC 有着举足轻重的地位。Dubbo、Thrift、gRpc 等框架各领风骚,学习RPC是新手也是老鸟的必修课。...本文带你手撸一个rpc-spring-starter,深入学习和理解rpc相关技术,包括但不限于 RPC 原理、动态代理、Javassist 字节码增强、服务注册与发现、Netty 网络通讯、传输协议、...RPC定义 远程服务调用(Remote procedure call)的概念历史已久,1981年就已经被提出,最初的目的就是为了调用远程方法像调用本地方法一样简单,经历了四十多年的更新与迭代,RPC...RPC基本原理 让我们回到 RPC 最初的目的,要想实现调用远程方法想调用本地方法一样简单,至少要解决如下问题: 如何获取可用的远程服务器 如何表示数据 如何传递数据 服务端如何确定并调用目标方法 上述四点问题...笔者将通过一个简单 RPC 项目来解决这些问题。

    35660

    手写RPC框架(二)--手写客户端和服务端源码

    ##整体模块: Module 说明 client 客户端 server 服务端 rpc-api RPC框架接口 hello-service-api 接口定义 rpc-netty 基于Netty实现的RPC...在 RPC 框架中,最关键的就是理解“桩”的实现原理,桩是 RPC 框架在客户端的服 务代理,它和远程服务具有相同的方法签名,或者说是实现了相同的接口,客户端在调用 RPC 框架提供的服务时,实际调用的就是...2.服务端:RPC 服务是怎么实现的?...RPC 框架的服务端主要需要实现下面这两个功能: 服务端的业务代码把服务的实现类注册到 RPC 框架中 ; 接收客户端桩发出的请求,调用服务的实现类并返回结果。...原因是,我们这两次分发分别是在不同的业务抽象分层中,第一次分发是在服务端的网络传输层抽象中,它是网络传输的一部分,而第二次分发是 RPC 框架服务端的业务层,是 RPC 框架服务端的一部分。

    32510

    手写RPC框架,一小时足矣!

    一、项目结构 RPC即远程过程调用,也叫远程方法调用,RPC框架可以实现调用方可以像调用本地方法一样调用远程服务的方法。要了解微服务和分布式,RPC必不可少,话不多说,下面直接开整。...新建rpc maven项目,分别创建comsumer、provider、provider-com、rpc-framework四个maven项目子模块,其中provider和provider-com都属于方法提供者...一般服务都会多节点部署,rpc框架需要通过负载均衡算法来决定消费者要调用哪一个服务的具体方法。...这里只是简单的实现一个随机算法,实际的rpc框架如dubbo、spring Cloud的负载均衡实现都要复杂得多的多。...当consumer调用provider接口时,rpc框架就会利用httpClient向生产者发起http请求。

    32610

    手写RPC框架,真不是为了装13!

    造轮子 根据上面的这些原理,田哥也搞了一个RPC框架,命名为mink(一个动物的名称)。...--mink ----mink-rpc rpc基本功能 ----mink-registry 服务注册与发现 ----mink-spring 集成SpringBoot 然后,我们把mink-spring打成...接着就是properties的配置: mink.rpc.servicePort=20880 mink.rpc.registryType=0 mink.rpc.registryAddress=127.0.0.1...再来看看properties配置项: mink.rpc.registryType=0 mink.rpc.registryAddress=127.0.0.1:2181 server.port=8090...自己动手写完这个mink框架,面试还是可以吹吹,同时,也意味着你对上面技术点掌握到手,你觉得面试官还不喜欢吗? 我们不是为了装逼而造轮子,而是想通过造轮子这个过程,把我们学到的技术给用进去。

    73830
    领券