0%

tcpdump 是一个强大的抓包工具,它可以用于抓取指定网络端口上的数据,这在某些场景下会非常有用。tcpdump 的命令参数相当复杂,打开它的 man page,你会发现有好多页内容,真让人头大。此外它的日志输出格式也比较独特,如果不了解规则的话将很难读懂。

阅读全文 »

学习一门新的语言,通常是以 HelloWorld 开始的。类似地,学习一个网络框架,通常是以 EchoServer 开始的。接下来我们就来看下如何通过 netty 实现一个 EchoServer。

阅读全文 »

fastjson提供了一个全局的修改序列化配置的方式。如果你对某个类型的默认序列化方式不满意,或者想指定自定义类型的序列化方式,那么你可以通过修改全局配置的方式实现。

阅读全文 »

当多个线程使用同时同一个 PoolArena 分配内存时,因为存在竞争关系,所以会导致内存分配性能下降。为了减少冲突,PooledByteBufAllocator 会提供多个 PoolArena,并通过 PoolThreadCache 分配给每个 FastThread 线程,同一个线程多次分配释放的过程中,还会使用到缓存,以降低多次内存分配的压力。

阅读全文 »

最近花时间研究了下 Netty 的内存管理实现,感觉挺有意思的,但也明显地感觉到,这部分功能要比其他功能模块更难理解。在这个过程中,我一直在想,如果能有这么一张图,能够说明内存管理的模块组成、各个模块之间的关系以及其实现原理,那么我就可以以更短的时间读懂相关源码了。因此,我将自己的一些理解画成了图。如果你也对这块内容感兴趣,兴许这篇文章能有所帮助。

阅读全文 »

Unpooled 是 netty 提供的一个工具类,通过它可以方便地创建各种类型的 ByteBuf。需要注意的是,通过 Unpooled 创建的是非池化的 ByteBuf,在注重性能的场景需要使用各种 PooledByteBuf。接下来我们就来看下 Unpooled 类是如何使用的。

阅读全文 »

在高性能网络通信框架中,I/O 模型和线程模型是两个核心的关注点。对于 I/O 多路复用模型,需要将 selector 上的事件分发给对应的事件处理者。在 Reactor 线程模型中,Reactor 作为事件分发器,负责分发各种 I/O 事件。

阅读全文 »