为了账号安全,请及时绑定邮箱和手机立即绑定

自己动手实现RPC框架

司马极客 软件工程师
难度中级
时长 2小时40分
学习人数
综合评分8.97
27人评价 查看评价
9.0 内容实用
8.6 简洁易懂
9.3 逻辑清晰
  • 跟着讲师的代码一定会出bug。

    有这么几个地方讲师代码遗漏

    1.RpcClient中无参构造函数记得初始化this(new RpcClientConfig());
    2.RandomTransportSelector#select 方法实现错误,是取不应该是删除;
    3.Client测试类未传入实例化的RpcClientConfig()

    还有些小问题估计是引入包时没注意,但总体老师讲的很精彩,花了3天消化这两小时,受益匪浅。

    以下是运行成功的图:

    Server端http://img1.sycdn.imooc.com//5eb51f6100017d6217890382.jpg

    Client端:

    http://img1.sycdn.imooc.com//5eb51f9d0001eaff12510145.jpg

    查看全部
  • 首先是client要去调用client stub(存根)这个接口里面的方法,这时候这个接口的实现在远程,所以需要sockets网络传输,才能达到调用(即通过sockets建立连接,传输数据),在通过sockets进行传输之前,需要第2步的序列化(把传输的对象转成可传输的二进制数据)。

    假设此时server的sockets拿到了数据,需要第4步的反序列化(将拿到的二进制数据反序列化为对象),在这个对象中包含了这个客户端要调用的服务端的信息(像它调用的是那个接口,也即它调用的是哪个存根,接口里面的什么方法方法里面参数的类型,以及返回值的类型等),之后server回去找到这个接口的具体实现类的对象。通常这个对象为了性能考虑,一般会做成单例模式。

    这个server stub找到这个对象之后会通过反射来调用这个方法,方法调用完成后可以拿到计算的结果,拿到结果后又通过第7步的序列化成二进制,然后通过网络传输8响应给client,client拿到这个数据之后也会通过9将其序列化为对象,然后得到结果10

    那么本次调用结束

    调用关键点:

    一定要的网络模块(用于网络传输)

    序列化模块(对象与二进制数据之间的互转)

    client 端,(怎么就通过调用一个接口就调用到远程方法呢?其实她内部有一个存根代理对象,而这个网络的交互,序列化操作都是由这个代理对象来完成的)

    server端肯定需要一个对服务进行管理的组件,里面完成了服务的查找,服务的反射调用等

    查看全部
    5 采集 收起 来源:核心原理

    2020-02-28

  • 呵呵
    查看全部
  • client模块是rpc-client;codec是序列化模块,commen是公用方法的模块,proto是server与client之间的协议就定在proto里面,transport是网络通信模块;server是rpc-server,对service进行管理

    查看全部
  • RPC的调用过程如下:

    第一步:server会将她需要暴露的服务以及他的地址信息注册到Registry这一注册中心。

    第二步:client通过注册中心一只关注它所需要的服务在哪里,如果此时server的地址发生改变,server会再次注册入Registry,然后Resgistry会通知给RPC client。

    现在client已经有了server的地址以及它暴露服务的信息,就可以做最后一步调用了(即3 call 步)。

    其实在这里,注册中心并不是必要的组件,client可以把服务端的信息直接写死进client,然后直接去调用rpc server,实则可以发现3 call这一步才是rpc调用最关键的一步!!


    查看全部
    1 采集 收起 来源:核心原理

    2020-02-28

  • TCP长连接

    查看全部
    0 采集 收起 来源:技术栈

    2024-05-09

  • 依赖中间件做数据交互(数据存储)

    直接交互(Http、RPC、WS)

    在RPC中:

    Server--服务提供者

    Client -- 服务消费者

    Stub -- 存根、服务描述

    查看全部
  • 2-6

    查看全部
  • 2-5

    查看全部
  • 2-4

    查看全部
  • 2-3

    com.hh

    hh-rpc

    hh-rpc-common

    hh-rpc-proto

    hh-rpc-codec

    hh-rpc-transport

    hh-rpc-server

    hh-rpc-client

    查看全部
  • 2-2

    查看全部
    0 采集 收起 来源:实战篇---类图

    2023-12-30

  • 2-1

    查看全部
    0 采集 收起 来源:实战篇概述

    2023-12-30

  • 2

    查看全部
  • RPC

    查看全部
    0 采集 收起 来源:概念讲解

    2023-12-30

首页上一页123456下一页尾页

举报

0/150
提交
取消
课程须知
1、RPC框架的核心原理 2、良好的编码习惯、如何使用junit编写测试用例 3、良好的工程结构以及maven怎么管理多模块 4、常见工具包的使用(commons-io、fastjson、lombok) 5、java反射的应用、java动态代理的应用 6、Map怎么自定义key 7、如何在程序中嵌入jetty
老师告诉你能学到什么?
本课程一开始会对RPC的原理进行剖析,接着会基于Java开发一个RPC框架。在开发前要求大家对Java基础有一定的了解,比如类和接口怎么定义。同时还会用到一些Java Servlet相关知识,主要是能区分Servlet的post和get方法的作用。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!