昨天和前天初步过了一下官网,可能后面有点费解,所以今天在这里说说其中存在的个人认为的难理解的点。
首先还是先看一下我的项目整体包含的文件:
先简单介绍一下每个文件的用处:
- DiscardServer:我们的服务器入口,定义了管道端口等内容。
- TimeClient:我们的客户端入口,同样定义了客户端管道和连接的服务器等。
- TimeClientHandler:客户端管道处理逻辑。
- TimeDecoder:在客户端正式处理管道数据之前,先对数据进行解码(为什么需要解码呢,往下看)。
- TimeEncoder:在服务端正式发送数据之前,先对所需发送的数据进行编码(为什么需要编码,往下看)。
- UnixTime:这是我们自定义类,那么很明显了,因为我们想通过Netty发送我们自定义的类来传递内容,也就是所谓的POJO。
这是所有的类文件。那么我们先看第一个DiscardServer:
首先我们注意下1处,这里我们在原来的基础上增加了一个类叫做TimeEncoder ,这个类如下:
其实就是把我们自定义的类的value变量拿出来发送出去。那么这里我们发现他继承的类是ChannelOutboundHandlerAdapter,稍微了解过Netty的朋友看着就眼熟了,outbound出来了。这里我做了测试,这个类的执行要落后于server端的Handler中的ctx.write。那么也就说我们先经过TimeServerHandler中的逻辑处理,然后通过ctx发送出去,如下: