04.Netty源码分析之启动流程分析

[TOC]一、NIO启动流程Netty底层是NIO,从对NIO的组件封装开始进行分析。本次对Netty的分析主要是在源码中找到下方NIO的方法,来看看netty中对下面的代码是怎样进行处理的//1 netty 中使用 NioEventLoopGroup (简称 nio boss 线程)来封装线程和 selector //可以同时监听多个channel上的读和写事件 Selector sele...

Java 2022-06-24 PM 140次 0条

03.Netty搭建RPC框架

[TOC]一、概述RPC的目的,让分布式或者微服务系统中不同服务之间的调用(远程调用)像本地调用一样简单,调用者感知不到远程调用的逻辑。二、目的客户端向服务端发送请求,调用HelloService接口中的sayHello方法,最后服务端将结果返回给客户端HelloService接口public interface HelloService { String sayHello(Stri...

Java 2022-06-23 PM 132次 0条

02.Netty优化之参数调优

[TOC](1) CONNECT_TIMEOUT_MILLIS属于 SocketChannal 的参数用在客户端建立连接时,如果在指定毫秒内无法连接,会抛出 timeout 异常注意:Netty 中不要用成了SO_TIMEOUT 主要用在阻塞 IO,而 Netty 是非阻塞 IO示例import io.netty.bootstrap.Bootstrap; import io.netty.ch...

Java 2022-06-22 PM 127次 0条

01.Netty优化之扩展序列化算法

[TOC]一、概念序列化最终的目的是为了对象可以跨平台存储和进行网络传输,而一般进行跨平台存储和网络传输的方式就是 IO,而 IO 支持的数据格式就是字节数组。将对象转成字节数组的时候需要制定一种规则,这种规则就是序列化机制。序列化和反序列化概述序列化:就是把对象转化为可传输的字节序列过程;反序列化:就是把字节序列还原为对象的过程。二、常见序列化方式序列化只是定义了拆解对象的具体规则,那这种...

Java 2022-06-21 PM 115次 0条

07.Netty进阶之聊天室案例

[TOC]一、聊天室业务介绍用户管理接口/** * 用户管理接口 */ public interface UserService { /** * 登录 * @param username 用户名 * @param password 密码 * @return 登录成功返回 true, 否则返回 false */ boole...

Java 2022-06-20 PM 131次 0条

06.Netty进阶之Sharable注解

[TOC]一、@Sharable概述表示可以将带注释的 ChannelHandler 的同一个实例多次添加到一个或多个 ChannelPipelines 中,而不会出现竞争条件。如果未指定此注解,则每次将其添加到管道时都必须创建一个新的处理程序实例,因为它具有成员变量等非共享状态。(这个是Netty的官方给的说明)简单的理解:@Sharable是用来修饰ChannelHandler的Chan...

Java 2022-06-20 AM 138次 0条

05.Netty进阶之自定义协议

[TOC]一、网络协议基本要素魔数魔数是通信双方协商的一个暗号,通常采用固定的几个字节表示。魔数的作用是防止任何人随便向服务器的端口上发送数据。服务端在接收到数据时会解析出前几个固定字节的魔数,然后做正确性比对。如果和约定的魔数不匹配,则认为是非法数据,可以直接关闭连接或者采取其他措施以增强系统的安全防护。魔数的思想在压缩算法、Java Class 文件等场景中都有所体现,例如 Class ...

Java 2022-06-16 PM 164次 0条

04.Netty进阶之协议设计与解析

[TOC]前言小故事很久很久以前,一位私塾先生到一家任教。双方签订了一纸协议:“无鸡鸭亦可无鱼肉亦可白菜豆腐不可少不得束修金”。此后,私塾先生虽然认真教课,但主人家则总是给私塾先生以白菜豆腐为菜,丝毫未见鸡鸭鱼肉的款待。私塾先生先是很不解,可是后来也就想通了:主人把鸡鸭鱼肉的钱都会换为束修金的,也罢。至此双方相安无事。年关将至,一个学年段亦告结束。私塾先生临行时,也不见主人家为他交付束修金,...

Java 2022-06-16 PM 136次 0条

03.Netty进阶之长度域解码器

[TOC]一、概述长度域解码器(LengthFieldBasedFrameDecoder)是解决 TCP 拆包/粘包问题最常用的解码器。它基本上可以覆盖大部分基于长度拆包场景,开源消息中间件 RocketMQ 就是使用长度域解码器进行解码的。长度域解码器相比固定长度解码器和特殊分隔符解码器要复杂一些,接下来我们就一起学习下这个强大的解码器。二、重要属性长度域解码器特有属性// 长度字段的偏移...

Java 2022-06-15 AM 141次 0条

02.Netty进阶之粘包与半包解决方案

[TOC]一、解决方案短链接:发一个包建立一次连接,这样连接建立到连接断开之间就是消息的边界,缺点效率太低定长解码器:每一条消息采用固定长度,缺点浪费空间行解码器:每一条消息采用分隔符,例如 n,缺点需要转义LTC解码器:每一条消息分为 head 和 body,head 中包含 body 的长二、示例2.1 短链接客户端每次向服务器发送数据以后,就与服务器断开连接,此时的消息边界为连接建立到...

Java 2022-06-14 PM 141次 0条