• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

Netty 中的内存分配浅析

Netty 中的内存分配浅析
Netty 出发点作为一款高性能的 RPC 框架必然涉及到频繁的内存分配销毁操作,如果是在堆上分配内存空间将会触发频繁的GC,JDK 在1.4之后提供的 NIO 也已经提供了直接直接分配堆外内存空间的能力,但是也仅仅是提供了基本的能力,创建、回收相关的功能和效率都很简陋。基于此,在堆外内存使用方面,Netty 自己实现了一套创建、回收堆外内存池的相关功能。……继续阅读 »

winrains 4个月前 (06-28) 60浏览 1个赞

Netty 中的消息解析和编解码器

Netty 中的消息解析和编解码器
本篇内容主要梳理一下 Netty 中编解码器的逻辑和编解码器在 Netty 整个链路中的位置。 前面我们在分析 ChannelPipeline 的时候说到入站和出站事件的处理都在 pipeline 中维护着,通过list的形式将处理事件的 handler 按照先后关系保存为一个列表,有对应的事件过来就按照列表顺序取出 handler 来处理事件。 如果是入……继续阅读 »

winrains 5个月前 (06-05) 77浏览 1个赞

Netty 中的粘包和拆包

Netty 中的粘包和拆包
Netty 底层是基于 TCP 协议来处理网络数据传输。我们知道 TCP 协议是面向字节流的协议,数据像流水一样在网络中传输那何来 “包” 的概念呢? TCP是四层协议不负责数据逻辑的处理,但是数据在TCP层 “流” 的时候为了保证安全和节约效率会把 “流” 做一些分包处理,比如: 发送方约定了每次数据传输的最大包大小,超过该值的内容将会被拆分成两个包发……继续阅读 »

winrains 5个月前 (05-19) 45浏览 1个赞

Netty 中的心跳检测机制

Netty 中的心跳检测机制
心跳检测一般存在于建立长连接 或者 需要保活的场景。 心跳的使用场景 长连接的应用场景非常的广泛,比如监控系统,IM系统,即时报价系统,推送服务等等。像这些场景都是比较注重实时性,如果每次发送数据都要进行一次DNS解析,建立连接的过程肯定是极其影响体验。 而长连接的维护必然需要一套机制来控制。比如 HTTP/1.0 通过在 header 头中添加 Conn……继续阅读 »

winrains 6个月前 (04-29) 51浏览 1个赞

backlog与TCP三次握手之间不得不说的事

backlog与TCP三次握手之间不得不说的事
前言 前段时间在学习 netty 源码的时候,遇到了一个知识点:在服务端套接字创建的过程中,可以通过 option() 方法为服务端 channel 设置 TCP 相关的参数,例如:ChannelOption.SO_BACKLOG,该参数就是设置 tcp 的 backlog 属性的值(示例代码如下)。实际上不仅是在 netty 中可以设置,在 JDK 原……继续阅读 »

winrains 6个月前 (04-23) 47浏览 2个赞

Netty源码分析系列之writeAndFlush(下)

Netty源码分析系列之writeAndFlush(下)
前言 在上一篇文章中(Netty 源码分析系列之 writeAndFlush()上)分析了 netty 将数据写出流程的前半部分:write()方法源码,知道了在这个过程中,数据只是被存放到了 NioSocketChannel 对象的 ChannelOutboundBuffer 缓冲区中,还没有被发送到操作系统的套接字中。只有当调用了 flush()方法……继续阅读 »

winrains 6个月前 (04-23) 55浏览 1个赞

Netty源码分析系列之writeAndFlush(上)

Netty源码分析系列之writeAndFlush(上)
前言 前两篇文章中分析了 netty 中解码器相关的源码,解码过程是发生在读数据这一步的,那么读到数据,经过解码器解码后,最终就会交由我们自定义的业务处理中执行,当我们的业务逻辑处理完成后,就需要给客户端响应消息,这就涉及到服务端如何通过 channel 将响应消息写出去的流程了,同时还会涉及到消息的编码过程,因为在 TCP 协议中,数据最终是通过字节流……继续阅读 »

winrains 6个月前 (04-23) 45浏览 1个赞

Netty源码分析系列之常用解码器(下)

Netty源码分析系列之常用解码器(下)
前言 在上一篇文章中分析了三个比较简单的解码器,今天接着分析最后一个常用的解码器:LengthFieldBasedFrameDecoder,这是一个基于长度字段的解码器。什么意思呢?就是在发送的数据中,使用一个字段来表示数据的长度,这样当接收方接收到数据后,先读出这个长度字段,读到了长度字段,那就知道了这次发送的数据有多长,这样就能解码出数据了。 属性介……继续阅读 »

winrains 6个月前 (04-23) 52浏览 1个赞

Netty源码分析系列之常用解码器(上)

Netty源码分析系列之常用解码器(上)
前言 在上一篇文章中,只分析了 netty 如何通过编解码器解决了 TCP 粘包、半包的问题,没有具体分析解码器是如何来对数据进行解码的,今天本文将具体分析这些解码器的工作原理。 netty 为我们提供了几个十分常用的解码器,这几个解码器几乎能满足我们所有的场景,这几个解码器根据难易程度,从上到下,如下表所示。 FixedLengthFrameDecod……继续阅读 »

winrains 6个月前 (04-23) 46浏览 1个赞

Netty源码分析系列之TCP粘包、半包问题以及解决方法

Netty源码分析系列之TCP粘包、半包问题以及解决方法
问题 在上一篇文章中分析到了 Netty 服务端是如何进行新连接的接入的,那么当新连接接入后,就可以开始数据的读写操作了。在进行数据读写操作时,对于 TCP 连接而言,netty 就需要解决 TCP 中粘包、半包的问题,这将是本文今天重点分析的内容。在开始阅读本文之前,可以先思考一下以下两个问题。 什么是 TCP 的粘包、半包问题?UDP 协议存在粘包……继续阅读 »

winrains 6个月前 (04-23) 48浏览 1个赞