Netty_06_手写RPC基础版(实践类)

news2024/9/22 12:28:03

文章目录

  • 一、前言
  • 二、整体运行
  • 三、客户端和服务端
    • 3.1 客户端
    • 3.2 服务端
    • 3.3 RpcServerInitializer和RpcClientInitializer
  • 四、小结

一、前言

常用的rpc框架:dubbo thrift gRPC
rpc定义:remote proceducer call
rpc目的/解决的问题: 像调用本地服务一样调用远程服务

nio(非阻塞io,可以接收无限个cmd连接) - reactor(nio的网络设计模式) - netty依赖(高性能的网络通信框架) - rpc框架(像调用本地服务一样调用远程服务)

在微服务架构中,网络通信是一个问题,springcloud dubbo 中的各个微服务之间,相互调用,都是使用rpc协议进行通信,比如 openfeign .

rpc具体实现架构(为了完成 “像调用本地服务一样调用远程服务” 的目的):
在这里插入图片描述

需要用到的东西,包括 多协议、自定义消息类型、多种序列化方式、反射调用 等。

源码下载:https://www.syjshare.com/res/QL0434P3

手写RPC框架是netty的应用,不断往dubbo上靠拢

二、整体运行

先启动rpc服务端
在这里插入图片描述

然后启动rpc客户端,看日志

在这里插入图片描述

然后看rpc服务端的日志

在这里插入图片描述

三、客户端和服务端

3.1 客户端

步骤1:客户端启动就拼装消息bean
步骤2:对象bean序列化为byte[] out写出去 log.info("============begin RpcEncoder=========");
步骤3:接收到服务端响应,立刻反序列化为对象 log.info("========begin RpcDecoder==========");
步骤4:打印一下反序列出来的对象 log.info("receive Rpc Server Result");

步骤1:客户端启动就拼装消息bean

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

步骤2:对象bean序列化为byte[] out写出去 log.info("============begin RpcEncoder=========");

在这里插入图片描述
步骤3:接收到服务端响应,立刻反序列化为对象 log.info("========begin RpcDecoder==========");

在这里插入图片描述
步骤4:打印一下反序列出来的对象 log.info("receive Rpc Server Result");

在这里插入图片描述

3.2 服务端

步骤1:接受到就解码反序列化为bean对象
步骤2:打印出来bean对象
步骤3:拼装响应
步骤4:编码为byte[],并发送出去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 RpcServerInitializer和RpcClientInitializer

在这里插入图片描述
server有四个handler client有五个handler,相同的handler
编码器:就是固定长度,解决拆包粘包问题
序列化和反序列化:先序列化,然后发送;先接收,然后反序列化

四、小结

这个代码,服务端是netty集成springboot,客户端是普通的java main启动,演示netty的功能,包括如下:

(1) 可以提供nio,简化了 (代码演示了)
(2) 网络中的拆包粘包问题 (代码演示了)
(3) 多协议(代码演示了)
(4) 多种序列化方式 (代码演示了)
(5) 自定义消息格式 (代码演示了)
(6) 内存池 和 零拷贝 (内部原理,代码无法演示)

源码下载:https://www.syjshare.com/res/QL0434P3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx实战应用-负载均衡

在上篇文章的基础上我们再创建两个服务,三个服务的端口分别是 8081 8082 8083. 2.Nginx配置 upstream块 upstream name{…} upstream gupao{ server 192.168.12.1:8081; server 192.168.12.1:8082; server 192.168.12.1:8083; } server { location / { pr…

平均月薪15k+?自动化测试工程师?3个月教你从“点工”蜕变为“码农”

前言 一、自动化测试工程师平均收入【看图(来自职友集)】 基本收入都在15k左右,随着技术的越来越牛逼工资也就会越来越高。 我的职业生涯开始和大多数测试人一样,刚开始接触都是纯功能界面测试。那时候在一家电商公司做测试&…

[附源码]计算机毕业设计基于vue+mysql开发的考试系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【PAT甲级 - C++题解】1092 To Buy or Not to Buy

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:PAT题解集合 📝原题地址:题目详情 - 1092 To Buy or Not to Buy (pintia.cn) 🔑中文翻译:买还是不买 &#x…

JAVA中的运算符-关系运算符

文章目录0 写在前面1 关系运算符说明2 举例3 写在最后0 写在前面 JAVA包含丰富的关系运算符,这些关系运算符最终结果一定是boolean类型。即两个结果:true false 1 关系运算符说明 符号说明ab,判断a和b的值是否相等,成立为true,…

游戏开发48课 性能优化6

3.7.2 算法优化 思路是找出最耗CPU的算法或逻辑,优化之。 空间换时间。利用预排序/预处理/缓存/动态规划等等思路换取CPU的性能。选取更快的算法。属于数据结构和算法的范畴,思路是将O(n2)降低成O(n)或O(logn),具体可以参看《算法导论》《游…

springcloud 服务消费及熔断

目录 1. 服务消费方式 1.1 RestTemplate 1.2 feign 2. 服务熔断(降级) 2.1 在微服务架构中服务熔断的必要性 2.2 hystrix 1. 服务消费方式 1.1 RestTemplate 传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过…

PMP内容2

PMP内容2目录概述需求:实现思路分析1.沟通管理2.监督沟通:3.风险管理4.5.实施采购控制采购相关方管理:相关方Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make …

JavaWeb语法一:进程和线程的区别与联系

目录 1.进程的概念 1.1:进程控制块抽象(PCB) 1.2:进程调度的相关属性 1.2.1:进程的状态 1.2.2:优先级 1.2.3:上下文 1.2.4:记账信息 2:进程的虚拟地址空间 3.线程…

算法与数据结构29:四边形不等式技巧

四边形不等式技巧题目一题目二题目三四边形不等式技巧题目四题目五题目一 给定一个非负数组arr,长度为N, 那么有N-1种方案可以把arr切成左右两部分 每一种方案都有,min{左部分累加和,有部分累加和} 求这么多方案中,mi…

我当PM,把ChatGPT玩冒(bà)烟(gōng)了

最近ChatGPT太火,本拐也注册了一个。用着确实是十分上头。而且事实证明,在处理明确的工程类业务时,ChatGPT可以让程序员事倍功半(也有可能饭碗不保🙈)参见: 跟着ChatGPT手把实现一个websocket连…

数据管理 Valentina Studio Pro 12.6 Crack

Valentina Studio 被描述为与 MySQL、SQL Server、Maria DB、SQLite、PostgreSQL 以及最后但并非最不重要的 Valentina DB 数据库一起用于工作流程的数据库工具的通用管理。Valentina Studio 能够允许用户和开发人员连接所有重要的数据库并运行查询,以及创建图表以了…

Hadoop如何保证自己的江湖地位?Yarn功不可没

前言 任何计算任务的运行都离不开计算资源,比如CPU、内存等,那么如何对于计算资源的管理调度就成为了一个重点。大数据领域中的Hadoop之所以一家独大,深受市场的欢迎,和他们设计了一个通用的资源管理调度平台Yarn密不可分&#x…

高性能缓存Caffeine的基本使用方式

文章目录介绍性能比对使用方式一、Population(缓存类型)1.Cache2.Loading3.Asynchronous (Manual)4.Asynchronously Loading二、Eviction(驱除策略)1.Size-based(基于容量)2.Time-based(基于时间…

Redis Cluster 单机部署

高可用架构-Redis Cluster Redis服务器支持单机、主从复制、Sentinel、集群部署,部署架构也是由简单到复杂,Redis Cluster 集群架构是官方推荐应对大数据量、大并发场景部署方案。Redis的架构变迁如下图所示,其归属就是Redis Cluster Redis …

一款功能强大的课程报名系统 v6.2.0

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 课程报名系统可为专为教育培训机构设计的在线选课报名系统,学员可综合考虑课程分类、适合人群、上课地点、上课时间、课程价格等多种选报最合适的班级 课程报名系统发布v6.2…

组件库技术选型和开发环境搭建

点击上方卡片“前端司南”关注我您的关注意义重大原创前端司南本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!专栏上篇文章传送门:基于Vite打造业务组件库(开篇介绍…

盘点和总结秒杀服务的功能设计及注意事项技术体系

秒杀应该考虑哪些问题 超卖问题 分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低,如果超卖将严重影响公司的财产利益,因此首当其冲…

0代码20min |微信接入chat-GPT

0代码20min | 微信接入chat-GPT 拥有一个openai账号 这个账号比较麻烦,需要国外手机号认证,这个的话可以直接参考这篇文章ChatGPT注册攻略 - 知乎 (zhihu.com),这篇文章是用在线接受短信的虚拟号码 - SMS-Activate这个网站来注册账号的。 用…

《操作系统》期末考试试卷2参考答案

《操作系统》期末考试卷(第2套) 参考答案与评分标准 一、单项选择题(共15题,每题2分,共30分) 题 号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答 案 D A C C B A D D A B D C A B D 二、填空题(…