java 从零开始手写 RPC (04) -序列化】的更多相关文章

序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实现客户端调用服务端? 前面几节我们实现了最基础的客户端调用服务端,这一节来学习一下通讯中的对象序列化. 为什么需要序列化 netty 底层都是基于 ByteBuf 进行通讯的. 前面我们通过编码器/解码器专门为计算的入参/出参进行处理,这样方便我们直接使用 pojo. 但是有一个问题,如果想把我们的…
通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实现客户端调用服务端? java 从零开始手写 RPC (04) -序列化 前面我们的例子是一个固定的出参和入参,固定的方法实现. 本节将实现通用的调用,让框架具有更广泛的实用性. 基本思路 所有的方法调用,基于反射进行相关处理实现. 服务端 核心类 RpcServer 调整如下: serverBo…
<过时不候> 最漫长的莫过于等待 我们不可能永远等一个人 就像请求 永远等待响应 超时处理 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实现客户端调用服务端? java 从零开始手写 RPC (04) 序列化 java 从零开始手写 RPC (05) 基于反射的通用化实现 必要性 前面我们实现了通用的 rpc,但是存在一个问题,同步获取响应的时候没有…
说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的调用呢? 下面就让我们一起来看一下. 接口定义 计算方法 package com.github.houbb.rpc.common.service; import com.github.houbb.rpc.common.model.CalculateRequest; import com.github…
RPC 解决的问题 RPC 主要是为了解决的两个问题: 解决分布式系统中,服务之间的调用问题. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑. 这一节我们来学习下如何基于 websocket 实现最简单的 rpc 调用,后续会实现基于 netty4 的版本. 开源地址: https://github.com/houbb/rpc 完整流程 其中左边的Client,对应的就是前面的Service A,而右边的Server,对应的则是Service B. 下面一步一步详细解释一…
Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的.所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架. 完整代码以及说明文档,点我跳跃~ 1. 什么是RPC? RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据. RPC框架有很多,比较知名的如阿里的Dubbo.goog…
一.学习本文你能学到什么? RPC的概念及运作流程 RPC协议及RPC框架的概念 Netty的基本使用 Java序列化及反序列化技术 Zookeeper的基本使用(注册中心) 自定义注解实现特殊业务逻辑 Java的动态代理 自定义Spring Boot Starter 这里只是列出了你能从RPC框架源码中能学到的东西,本文并不会每个知识点都点到,主要讲述如何手写一个RPC框架,更多细节需要读者阅读源码,文章的下方会提供源码链接哦. 二.RPC基础知识 2.1 RPC是什么? Remote Pro…
手写RPC框架(六)整合Netty Netty简介: Netty是一个基于NIO的,提供异步,事件驱动的网络应用工具,具有高性能高可靠性等特点. 使用传统的Socket来进行网络通信,服务端每一个连接都要新建一个线程,清楚处理完成后通过输出流返回给客户端.而Netty通过NIO的方式,服务端实现为一个请求一个线程,客户端发送的连接请求会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才会启动一个线程进行处理. 这次我们通过Netty来实现网络通信,替代Socket,提高框架性能. 引入Ne…
rpc rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo. 主要用于个人学习,由渐入深,理解 rpc 的底层实现原理. 前言 工作至今,接触 rpc 框架已经有很长时间. 但是对于其原理一直只是知道个大概,从来没有深入学习过. 以前一直想写,但由于各种原因被耽搁. 技术准备 Java 并发实战学习 TCP/IP 协议学习笔记 Netty 权威指南学习 这些技术的准备阶段,花费了比较长的时间. 也建议想写 rpc 框架的有相关的知识储备. 其他 rpc 框架使用的经验…
类的内存分配 加载到方法区 对象在堆内存 局部变量在栈内存 判断真实类型,在方法区加载的类 对象.getClass(); 类名.class; 手写双向链表 package day1501_手写双向链表; // 链表类 public class SXLianBiao<T> { private Node first; // 头部节点, 初始 null private Node last; // 尾部节点, 初始 null private int size; // 节点数量,初始值 0 public…
RPC是什么?远程过程调用,过程就是业务处理.计算任务,像调用本地方法一样调用远程的过程. RMI和RPC的区别是什么?RMI是远程方法调用,是oop领域中RPC的一种实现,我们熟悉的restfull和webservice都是RPC,仅仅消息的组织方式和消息协议不同. RPC调用过程 : 1.客户端处理过程中调用client sub(像调用本地方法一样),传递参数 2.client sub将参数编组为消息,然后通过系统调用想服务端发送消息 3.客户端本地操作系统将消息发送给服务端 4.服务端操作…
服务端代码 package com.peiyu.rpcs.bios; import java.io.IOException; public interface IRpcServers { void start() throws IOException; /** * 服务注册 * @param serviceInterface 服务接口 * @param impl 服务实现类 */ void register(Class serviceInterface, Class impl); } 实现类 p…
写在前面的话 我做SLAM已经三年了.读书时初学SLAM,一开始无从下手,直到读了高博士的博客,茅塞顿开,渐入佳境.后来又买了他的<视觉SLAM十四讲>,常伴手边,直至毕业.几个月前找工作的时候,他是我的面试官,与之交谈,如沐春风.那时候我就萌生出一个念头,希望追随博士的脚步,把这些年的经验和心得分享给后来人,所谓"人人为我.我为人人",应该就是如此吧. -- 2022.04.16 激光SLAM与Cartographer 我的水平远不及博士,只好挑自己擅长的东西说起.Car…
前言 本文适合有一定java基础的同学,通过自定义持久层框架,可以更加清楚常用的mybatis等开源框架的原理. JDBC操作回顾及问题分析 学习java的同学一定避免不了接触过jdbc,让我们来回顾下初学时期接触的jdbc操作吧 以下代码连接数据库查询用户表信息,用户表字段分别为用户id,用户名username. Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultS…
IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过. 但是 spring 源码存在一个问题,那就是过于抽象,导致学习起来成本上升. 所以本项目由渐入深,只实现 spring 的核心功能,便于自己和他人学习 spring 的核心原理. spring 的核心 Spring 的核心就是 spring-beans,后面的一切 spring-boot,spr…
项目工程总览: 1.Dispatcher类(一个请求与响应就是一个Dispatcher) package com.bjsxt.server; import java.io.IOException; import java.net.Socket; import com.bjsxt.servlet.Servlet; import com.bjsxt.util.IOCloseUtil; /** * 一个请求与响应就是一个Dispatcher * @author Administrator * */ p…
代码目录结构 rpc-common存放公共类 rpc-interface为rpc调用方需要调用的接口 rpc-register提供服务的注册与发现 rpc-client为rpc调用方底层实现 rpc-server为rpc被调用方底层实现 rpc-sample-client就是使用自实现的rpc框架调用rpc-sample-server rpc-sample-server就是rpc框架的被调用方 技术要点 ## 1. 使用zookeeper作注册中心,把被调用方的信息注册上去 服务的注册 publ…
1.统计一篇英文文章单词个数.public class WordCounting {public static void main(String[] args) {try(FileReader fr = new FileReader("a.txt")) {int counter = 0;boolean state = false;int currentChar;while((currentChar= fr.read()) != -1) {if(currentChar== ' ' ||…
https://www.bilibili.com/video/av23508597?from=search&seid=6870947260580707913 https://github.com/Rainyn/zg-jack-soa https://blog.csdn.net/roysaliencydetection/article/details/81099104 https://gitee.com/rainyn/neptune-rpc…
1.栈实现 2.Iterator实现 3.单例 4.多线和控制(暂停,恢复,停止) 5.生产者消费者…
Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQueue<E> implements Queue<E> { /* * 成员变量:泛型数组.两个指向变量.循环队列个数size */ private E[] data; private int front, tail; private int size; // 有参构造,初始化数组容量大…
Frame.setDefaultCloseOpreation() Default:默认的 设置默认关闭操作 (0:什么都不干: 1:隐藏窗口: 2:关闭窗口但继续运行程序: 3:关闭窗口关闭程序:) static的用途: 方便在没有创建对象的时候进行调用.…
一.前言 前段时间看到一篇不错的文章<看了这篇你就会手写RPC框架了>,于是便来了兴趣对着实现了一遍,后面觉得还有很多优化的地方便对其进行了改进. 主要改动点如下: 除了Java序列化协议,增加了protobuf和kryo序列化协议,配置即用. 增加多种负载均衡算法(随机.轮询.加权轮询.平滑加权轮询),配置即用. 客户端增加本地服务列表缓存,提高性能. 修复高并发情况下,netty导致的内存泄漏问题 由原来的每个请求建立一次连接,改为建立TCP长连接,并多次复用. 服务端增加线程池提高消息处…
文章目录 Zookeeper的基本使用 Zookeeper单机部署 Zookeeper集群搭建 JavaAPI的使用 Zookeeper的应用场景 分布式锁的实现 独享锁 可重入锁 实现RPC框架 基本概念及原理 代码实现 服务端 客户端 总结 Zookeeper的基本使用 在之前的文章主要讲述了Zookeeper的原理,本文则是实践,包含Zookeeper单机环境到集群环境的搭建,基本配置,JavaAPI的使用以及手写实现分布式锁等内容.(PS:在往下进行之前,请务必准备至少3台linux虚拟…
算法是什么(二)手写个链表(java)   liuyuhang原创,未经允许禁止转载 目录 算法是什么(〇) 很多语言的API中都提供了链表实现,或者扩展库中实现了链表. 但是更多的情况下,Map(或hash)和List(非定容数组)的使用率更高. 这并非意味着链表不应该掌握或不使用了. 链表本质上是一种及其高等的数据结构展现,扩展性极强. 链表可轻松扩展成树结构,二叉树,环,栈,队列,双向队列等. 很多种数据结构都是依据链表的形式扩展出来的,虽然我知道的并不多,但是我知道链表的重要性. 所以,…
课程回顾 对象的创建过程 类加载 加载父类,父类的静态变量分配内存 加载子类,子类的静态变量分配内存 父类静态变量赋值运算, 和静态初始化块 子类静态变量赋值运算, 和子类初始化块 创建对象 创建父类对象, 父类的实例变量分配内存 创建子类对象, 子类的实力变量分配内存 父类的实例变量赋值, 父类的构造方法 子类的实例变量赋值 子类的构造方法 接口 作用: 结构设计工具, 解耦合, 隔离实现 本质上是一个抽象类 interface implements 接口可以实现多个 接口之间也可以多继承 内…
什么是RPC框架? RPC就是远程调用过程,实现各个服务间的通信,像调用本地服务一样. RPC有什么优点? - 提高服务的拓展性,解耦.- 开发人员可以针对模块开发,互不影响.- 提升系统的可维护性及高可用等. 基于socket思考: - 怎么建立网络通信? - 服务端怎么暴露服务并处理客户端请求? - 客户端怎么去拿到服务并调用? 基于socket的通信的展示图: 流程 1---->2---->3---->4 上面的图形根据自己的理解画的--有些不足,但理解就行. 创建父工程order…
查看手写JAVA虚拟机系列可以进我的博客园主页查看. 我们知道,我们编译.java并运行.class文件时,需要一些java命令,如最简单的helloworld程序. 这里的程序最好不要加包名,因为加了包名的话编译和运行需要有所改动. 看这里的命令.javac为编译命令,我们知道java的特点是一次编译,到处运行.这里的编译指的就是javac,对于java程序即.java文件,先要用javac编译成字节码.然后将字节码(.class文件)放到java虚拟机中运行,即上图中的java HelloW…
查看手写JAVA虚拟机系列可以进我的博客园主页查看. 前面我们介绍了准备工作以及命令行的编写.既然我们的任务实现命令行中的java命令,同时我们知道java命令是将class文件(字节码)转换成机器码,那么我们现在的任务就是读出这个class文件里面的内容. 正文: java虚拟机规范中是没有规定虚拟机该从哪里找类,也就是找class文件的,而oracle的是根据类路径,也就是classpath来搜索类的.搜索的优先级:启动类路径(bootstrap classpath)>扩展类路径(exten…