Netty ChannelPipeline执行过程理解

仅为一家之言,慎

理解

  • 今天将以前写的程序重新拿出来看了一下,发现对于netty有了新的疑惑,编解码器的执行到底是怎么样的,byteToMessageMessageToByte的过程到底是怎么样的
  • 其实先不想Netty,我们从正常的Java网络传输开始,我们想将对象在网络中传输,肯定不能使用对象本身,需要序列化,Java本身的序列化技术可以用,但是问题太多,一是效率低,码率大,二是不能跨语言,这个过程就是先将对象序列化,传输到另一端后,在另一端进行反序列化,重新形成对象;
  • 然后是Netty中,在Netty中,对于序列化这样的行为进行了封装,也就是说编解码器,我们在ChannelPipeline中会添加编解码器,在自定义的编解码器中,可以指定序列化的方式,默认的ObjectDecode/ObjectEncode是Java的序列化技术
  • 进入正题,首先,从客户端开始,当我们在一个ChannelHandler中调用ChannelHandlerContext中调用writeAndFlush时,消息从客户端发出去,这个消息一般是一个对象,然后会经过ChannelPipeline,一般我们创建ChannelPipeline时使用的时addLast,然而最后一个使我们的正式处理的handler,接着就是编码器的执行,将对象编码成对应的字节形式传输,虽然我们在服务端和客户端的ChannelPipeline中都添加了编码和解码器,但是发出的消息只会被编码,进来的消息只会被解码,所以在编码器和解码器的顺序并不重要
  • 待续…

你可能感兴趣的:(Netty)