Netty NIO
普通网友
这个作者很懒,什么都没留下…
展开
-
Netty 粘包解决方案
RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问题。本文首先会对粘包和拆包问题进行描述,然后介绍其常用的解决方案,最后会对Netty提供的几种解决方案进行讲解。这里说明一下,由于oschina将“jie ma qi”认定为敏感文字,因而本文统一使用“解码一器”表示该含义1. 粘包和拆包产生粘包和拆包问题的主要原原创 2020-05-22 11:58:52 · 218 阅读 · 0 评论 -
Netty 知识汇总05
select、poll、epoll之间的区别(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)...原创 2020-05-09 22:57:54 · 54 阅读 · 0 评论 -
Netty 知识汇总04
Netty(二):Netty为啥去掉支持AIO?那么为什么Netty还是选择的NIO模型呢?epoll对文件描述符有两种操作模式--LT(level trigger水平模式)和ET(edge trigger边缘模式)简单来讲,LT是epoll的默认操作模式,当epoll_wait函数检测到有事件发生并将通知应用程序,而应用程序不一定必须立即进行处理,这样epo...原创 2020-04-22 22:53:43 · 102 阅读 · 0 评论 -
Netty 知识汇总03
1.Netty 是什么?Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。2.Netty 的特点是什么?高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发...原创 2020-04-22 14:06:24 · 77 阅读 · 0 评论 -
Netty 知识汇总02
原创 2020-03-11 18:23:11 · 52 阅读 · 0 评论 -
Netty 知识汇总01
原创 2020-03-11 18:14:49 · 52 阅读 · 0 评论 -
Netty 源码分析 09 ChannelHandler
ChannelHandler(一) @Sharable注解,ChannelHandler 是否可共享,即是否可以被多次添加ChannelInitializer ,一个特殊的 ChannelHandler ,用于 Channel 注册到 EventLoop 后,执行自定义的初始化操作。一般情况下,初始化自定义的 ChannelHandler 到 Channel 中对于#h...原创 2019-11-30 16:01:50 · 391 阅读 · 0 评论 -
Netty 源码分析 08 buffer
Buffer 之 ByteBuf(一)Netty ByteBuf 相关的内容。它在buffer模块中实现,在功能定位上,它和 NIO ByteBuffer 是一致的,但是强大非常多原创 2019-11-30 16:01:02 · 88 阅读 · 0 评论 -
Netty 源码分析 07 Channel
2. Channelio.netty.channel.Channel,实现 AttributeMap、ChannelOutboundInvoker、Comparable 接口,Netty Channel 接口而 Netty 的 Channel 则提供的一系列的 API ,它大大降低了直接与 Socket 进行操作的复杂性。而相对于原生 NIO 的 Channel,Netty 的 Chan...原创 2019-11-30 16:01:15 · 158 阅读 · 0 评论 -
Netty 源码分析 06 ChannelPipeline
2.1 ChannelInboundInvokerio.netty.channel.ChannelInboundInvoker,Channel Inbound Invoker( 调用者 ) 接口2.2 ChannelOutboundInvokerio.netty.channel.ChannelOutboundInvoker,Channel Outbound Invoker( 调...原创 2019-11-30 16:01:00 · 208 阅读 · 0 评论 -
Netty 源码分析 05 EventLoop
在看 EventLoop 的具体实现之前,我们先来对 Reactor 模型做个简单的了解我们来看看 Reactor 模型的核心思想:初步一看,Java NIO 符合 Reactor 模型啊?因为 Reactor 有 3 种模型实现:单 Reactor 单线程模型 单 Reactor 多线程模型 多 Reactor 多线程模型第三种模型比起第二种模型,是将 Reactor ...原创 2019-11-16 11:00:56 · 234 阅读 · 0 评论 -
Netty 源码分析 08 编码Codec 01
4. CumulatorCumulator ,是 ByteToMessageDecoder 的内部接口。中文翻译为“累加器”,用于将读取到的数据进行累加到一起,然后再尝试解码,从而实现拆包。也是因为 Cumulator 的累加,所以能将不完整的包累加到一起,从而完整。当然,累加的过程,没准又进入了一个不完整的包。所以,这是一个不断累加,不断解码拆包的过程。对于Cu...原创 2019-10-19 11:15:57 · 171 阅读 · 0 评论 -
Netty 源码分析04 Buffer01
1. 概述一个 Buffer ,本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据。通过将这块内存封装成 NIO Buffer 对象,并提供了一组常用的方法,方便我们对该块内存的读写。Buffer 在java.nio包中实现,被定义成抽象类,从而实现一组常用的方法。整体类图如下:我们可以将 Buffer 理解为一个数组的封装,例如 IntBuffer、Ch...原创 2019-10-19 10:53:21 · 107 阅读 · 0 评论 -
知识点复习45 Java NIO && DirectBuffer
用户态只能执行简单运算,不能调用系统资源,通过系统接口函数,向内核发出指令Linux I/O 读写方式Linux 提供了轮询、I/O 中断以及 DMA 传输这 3 种磁盘与主存之间的数据传输机制。其中轮询方式是基于死循环对 I/O 端口进行不断检测。I/O 中断方式是指当数据到达时,磁盘主动向 CPU 发起中断请求,由 CPU 自身负责数据的传输过程。DMA 传输则在 ...原创 2019-10-12 00:11:35 · 273 阅读 · 0 评论 -
知识点复习42 Java NIO 01
1.1. JavaIO读写原理无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。先强调一个基础知...原创 2019-10-09 23:14:21 · 314 阅读 · 0 评论 -
Netty 源码分析02 bootstrap
connect方法,调用doResolveAndConnect,连接本地地址localAddress和远程地址remoteAddress1.调用initAndRegister,初始化并且注册channel 1.1 通过channelFactory创建channel,然后调用init初始化 1.2 init初始化分成客户端bootstrap初始化和服务端serve...原创 2019-09-29 09:48:53 · 218 阅读 · 0 评论 -
Netty 源码分析03 ServerBootstrap
init初始化方法1.设置channel选项,调用channelOptions2.设置channel的属性attr3.然后从channel中获取pipeline,然后给pipeline增加config中获取的handler1.增加对应的childHandler2.设置channel选项options3.设置属性,调用setAttributes4.增加监听器,监听...原创 2019-09-29 20:53:02 · 104 阅读 · 0 评论 -
Netty 工作流程分析
分析Netty工作流程:下面以Netty中Echo的例子进行流程跟踪,并简要的服务器启动->客户端连接-> 服务器处理连接-> 服务器处理客户端数据<-> 客户端处理服务器数据1:客户端连接:我们直接看这行代码:bootstrap.connect(newInetSocketAddress(host, port));通过帮助类Cli...原创 2019-09-29 20:59:45 · 190 阅读 · 0 评论 -
Netty 源码分析03 Channel 实现 AbstractChannel
注册方法1.调用doRegister()方法进行注册,如果是NIO实现,如下2.通过调用底层jdk的nio方法进行注册,本质上为放到channelArraythis.channelArray[this.totalChannels] = var1;3.注册后返回selectionKey,然后调用pipeline.fireChannelRegistered();4....原创 2019-09-30 16:17:46 · 360 阅读 · 0 评论 -
Netty 源码分析01 代码结构
1.all : 没有代码2.bom :没有代码3.buffer: 核心功能 ,数据传输的时候,需要使用到缓冲区4.codec:Netty的编解码器5.common :通用的基础工具类实现6.handler :各种处理器handler7.resolver: 定义了解析器8.transport: netty核心功能...原创 2019-09-28 20:25:56 · 109 阅读 · 0 评论