Zhl Blog

充满好奇,保持谦逊,一途一心。

5-2.Netty源码 新增用户自定义ChannelHandler

新增用户自定义ChannelHandler

通过一个例子来展开说明 1 2 3 4 5 public class MyChannelInitializer extends ChannelInitializer { public void initChannel(Channel channel) { channel.pipeline().addLast("myHandler", new MyHandler())...

5-1.Netty源码:Pipeline初始化

Pipeline初始化

在Channel创建的时候Pipeline被创建出来,一个Channel对应一个Pipeline。 1 2 3 4 5 6 7 8 9 10 11 12 //AbstractChannel.java->DefaultChannelPipeline.java protected DefaultChannelPipeline(Channel channel) { this.chann...

Netty源码:ChannelHandlerContext

ChannelHandlerContext

对Netty中的ChannelHandlerContext的文档大概翻译一下. 概述 ChannelHandlerContext 可以让一个ChannelHandler与它的ChannelPipeline和其他handler交互。此外一个处理器可以通知ChannelPipeline中下一个ChannelHandler并且可以动态修改它所属的ChannelPipeline对象 通知 可以通...

Netty源码:ChannelPipeline

ChannelPipeline

对Netty中的ChannelPipeline的文档大概翻译一下. ChannelPipeline本质上是个ChannelHandler的集合,它会处理或者拦截Channel的入栈事件以及出栈的操作。ChannelPipeline实现了一种高级拦截过滤器模式 使用户可以完全控制事件的处理方式以及管道中的ChannelHandler如何相互交互。 管道创建 每个channel都有自己pip...

4-3.Netty源码:NioSocketChannel读事件注册

NioSocketChannel读事件注册

客户端的读事件注册是紧接着【4.2.Netty源码:NioSocketChannel的线程分配和selector注册】后面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //AbstractChanne.java private void register0(ChannelPromise promise) { try { ...

4-2.Netty源码:NioSocketChannel的线程分配和selector注册

NioSocketChannel的线程分配和selector注册

具体实现是在AbstractNioMessageChannel#read() 服务端负责获取新连接并且处理。所以实现方法是在AbstractNioMessageChannel中 1 2 3 4 5 6 7 8 9 10 11 12 13 @Override public void read() { try { // ...新连接检测+封装NioSocke...

4-1.Netty源码:新连接检测

新连接检测

使用telnet 连接服务端的demo,充当客户端的连接。 telnet 127.0.0.1 8888 先读取客户端channelHander -> AbstractNioMessageChannel#read ->再读取服务端channelHandler 在NioEventLoop# processSelectedKey(SelectionKey k, AbstractN...

4-1-1.Netty源码:新连接NioSocketChannel初始化

新连接NioSocketChannel初始化

NioSocketChannel是基于NIO选择器的实现。 NioSocketChannel继承关系(有删减) 1 2 3 4 public NioSocketChannel(Channel parent, SocketChannel socket) { super(parent, socket); config = new NioSocketChannelConfig(thi...

3-2-1.Netty源码:避免空轮循的bug

避免空轮循的bug

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 //NioEventLoop.java //重新构造个selector private void rebuildSelector0() { final Sele...

3-4.Netty源码:任务和定时任务队列

任务和定时任务队列

Netty中任务分普通任务Runable和定时任务ScheduledFutureTask。分别对应两种队列Queue和PriorityQueue 任务添加 1.普通任务添加 再SingleThreadEventExecutor#execute中进行 addTask 1 2 3 4 5 6 7 protected void addTask(Runnable task) { ...