![](https://img-blog.csdnimg.cn/f710ccdb5c744e0f877a824151d3aef4.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty专栏
文章平均质量分 94
本专栏旨在帮助您深入学习和应用Netty框架,构建可扩展、高性能的网络应用程序。
shark-chili
这个作者很懒,什么都没留下…
展开
-
来聊聊Netty使用不当导致的并发波动问题
在上一篇文章来聊聊Netty消息发送的那些事我们了解了Netty消息发送时对于并发场景消息未做流控导致的OOM问题,这一篇文章我们不妨来聊一下消息处理不当导致的OOM问题。原创 2020-08-03 19:19:31 · 528 阅读 · 0 评论 -
Netty网络传输详解
在上一篇文章Netty基础概念入门简记对Netty有了简单的认识,这一篇文章我们不妨对Netty进行进一步的探讨,我们不妨来聊聊Netty的传输。如果你尝试过JDK原生的网络编程,你就会发现使用原生API实现一次简单的网络交互有多么的繁琐,好在Netty为我们封装了许多的细节,我们只需按照其约定实现自己所需的逻辑细节即可,同样使得我们的代码没有被繁琐的创建过程污染,大大提升Java网络编程开发效率。原创 2022-02-16 01:16:56 · 496 阅读 · 0 评论 -
基于Netty连接池泄露问题了解客户端启动源码
我们生产环境常常会用Netty客户端作为连接工具,尽管Netty强大且方便,但是使用不当的话也可能造成严重的生成事故。笔者本文就以一个连接池使用不当导致内存泄漏的案例来展开探讨。原创 2023-12-15 08:37:16 · 2960 阅读 · 0 评论 -
来聊聊Netty消息发送的那些事
我们在上一篇文章来聊聊Netty的ByteBuf了解到Netty的传输API的使用,这一片我们来聊聊Netty消息发送时的一些注意事项。原创 2020-08-26 13:07:32 · 499 阅读 · 0 评论 -
基于NioEventLoop线程夯住问题了解线程池工作流程
耗时操作不要用NioEventLoop,尤其是本次这种高并发且拒绝策略配置为用执行线程接收忙碌任务的方式。服务端收不到消息时,建议从CPU、GC、线程等角度分析问题。建议使用两个NioEventLoop构成主从Reactor模式。原创 2020-02-02 16:41:28 · 637 阅读 · 0 评论 -
来聊聊ChannelHandler
上一篇文章来聊聊Netty使用不当导致的并发波动问题我们了解使用Netty时跨线程使用不当导致性能问题,这篇我们就基于几个经典的生产案例了解一下ChannelHandler的基本使用和工作机制。原创 2020-01-19 21:47:00 · 639 阅读 · 2 评论 -
Linux下Netty实现高性能UDP服务
常规的Netty处理UDP包我们只能用按个NIOEventLoop线程接收传输的数据包,从底层来看即只使用一个socket线程监听网络端口,通过这一个线程将数据传输到应用层上,这一切使得我们唯一能够调优的方式就是在Socket监听传输时尽可能快速将发送给应用程序,让应用程序及时处理完以便NIOEventLoop线程能够及时处理下一个UDP数据包。亦或者,我们也可以直接通过增加服务器的数量通过集群的方式提升系统整体的吞吐量。然而事实真是如此吗?原创 2023-12-18 14:31:53 · 2801 阅读 · 3 评论 -
Netty与TCP粘包拆包问题
什么是TCP粘包和拆包?为什么UDP不会出现这个问题?发生粘包和拆包的原因是什么?Netty是如何解决TCP粘包和拆包的?原创 2022-03-24 09:34:40 · 4508 阅读 · 0 评论 -
Netty源码ByteBuf详解
作为一个高性能网络编程框架,Netty的字节容器ByteBuf相较于JDK标准库自带的ByteBufferByteBuf按照分类可以分为堆内内存和直接内存,前者分配在JVM堆内存中,由JVM进行管理和GC,后者直接分配在本地内存上,需要我们进行手动释放,但是性能要好于前者。ByteBuf为读写操作分别提供读写指针,通过读写指针我们可以快速定位、设置指定偏移量上的数据。ByteBuf会根据使用情况进行动态扩容和缩容,使得它更加灵活,可以适应不同的数据大小。ByteBuf。原创 2020-08-27 08:38:35 · 359 阅读 · 1 评论 -
Netty新连接接入源码分析
我们都知道Netty的NioEventLoop轮询检测是否有新连接。检测到新连接时,为当前连接创建NioSocketChannel,也就是客户端连接的channel。为channel分配一个NioEventLoop。将当前channel的读写事件注册到NioEventLoop的selector上,此后这个channel的读写事件都由当前NioEventLoop处理。本文就会基于这个脉络对Netty新连接接入的处理流程进行分析。原创 2023-12-15 08:32:07 · 370 阅读 · 0 评论 -
来聊聊Netty的ByteBuf
它的功能可以被用户自定义的缓冲区类型扩展。通过内置的复合缓冲区类型实现了透明的零拷贝。容量可以按需增长(类似于 JDK 的 StringBuilder)。在读和写这两种模式之间切换不需要像JDK的ByteBuffer通过flip()方法进行切换。读和写使用了不同的索引,用户无需过度关注读写索引位置。支持方法的链式调用。支持引用计数,便于管理字节缓冲区的内存。支持池化,通过复用提升操作效率。原创 2021-03-08 14:46:02 · 5348 阅读 · 0 评论 -
Netty核心NioEventLoop源码解析
是Netty基于非阻塞式IO模型:通过非阻塞的IO模型,实现单个线程处理大量并发连接。事件驱动:基于事件驱动模型,管理和执行各种网络操作,例如:数据读写、连接管理、定时任务等,实现高效异步处理。内部包含一个事件队列,它会并按照收到的事件类型分发到对应的处理器上。IO多路复用:通过操作系统底层所提供的选择器(Selector)监听多个通道多个通道(即各个接入的连接),使得我们无需为每一个连接创建一个线程,不仅节约系统资源开销,还提升了系统的吞吐量。如下图所示,Netty对于EventLoop。原创 2023-12-18 10:33:03 · 307 阅读 · 0 评论 -
Netty服务端是如何启动的
Netty是一个用于构建高性能、可拓展、支持异步事件驱动的Java网络框架,基于该框架我们可以快速各种网络协议下的高性能Java网络应用程序。本篇文章基于自编写的引导类进行Netty服务端启动的流程进行详细分析和讲解。注意由于Netty服务端启动逻辑繁多,建议读者进行阅读时,可以基于源码跟随笔者的脚步一起调试,方便理解和掌握全流程。我们使用Netty编写服务端时需要基于这个引导类完成服务端配置工作,配置创建引导类。基于类完成IO模型、选项设置、属性设置、处理器设置。基于绑定端口和异步启动服务端。原创 2020-07-29 19:46:23 · 713 阅读 · 0 评论 -
Netty解码器源码解析
将字节流解码为消息对象,我们可以继承这个类编写一个自定义的解码器。:根据消息中的长度字段,读取指定位置只指定长度的数据。:根据指定的分隔符将字节流进行切割,用于处理基于分隔符的协议报文。:将字节流解码为字符串。:将字节流解码为Java对象。要自定义一个Netty解码器,通常需要扩展抽象类,并实现其中的方法。主要的方法是decode(),它接收一个对象、一个ByteBuf对象和一个对象作为参数。在decode()方法中,可以根据协议的定义从ByteBuf。原创 2020-07-28 13:41:12 · 149 阅读 · 0 评论 -
Netty常见的设计模式
设计模式在软件开发中起着至关重要的作用,它们是解决常见问题的经过验证的解决方案。而Netty作为一个优秀的网络应用程序框架,同样也采用了许多设计模式来提供高性能和可扩展性。在本文中,我们将探讨Netty中使用的一些关键设计模式,以及它们在构建强大网络应用程序中的应用。原创 2023-12-15 08:32:04 · 1404 阅读 · 1 评论 -
Netty消息编码及发送源码解析
我们在使用Netty进行消息发送时,本质上就是基于Netty提供的编码器将Java对象转为字节流,再交由底层Socket将消息转发的接收方的一个过程,而本章就会通过源码的解读的方式来了解其底层的工作逻辑。整体来说,Netty收到write事件后,将消息从开始传播,并完成编码。将消息封装成entry并加入buffer队列。刷新buffer队列,将消息写入socket底层,完成数据转发。原创 2023-12-15 08:32:01 · 350 阅读 · 1 评论 -
Netty核心源码Pipeline详细详解
在Netty中每一个Channel都会对应着一条双向链表pipeline,通过pipeline关联当前channel的来进行业务逻辑处理,本篇文章就会基于一个简单的示例作为入口带读者了解pipeline各个工作流程。基于上述示例代码,我们会从不同的角度对PipelinePipeline初始化详解。自定义服务端初始化详解。自定义服务端初始化详解。Pipeline事件传播机制详解。InBound事件传播机制详解。OutBound事件传播机制详解。异常传播机制详解。从。原创 2020-02-14 12:25:59 · 1185 阅读 · 3 评论