Netty中的channelRead和messageReceived的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty中的channelRead和messageReceived的区别相关的知识,希望对你有一定的参考价值。

需要编解码的才会去用messageReceived,一般都是使用ChannelRead来读取的。
SimpleChannelInboundHandler的源代码你就知道了,泛型不匹配,不会调用messageReceived的。
另:如果你特别特别想用SimpleChannelInboundHandler,你可以这样搞:public classYouTCPServerHandler extends SimpleChannelInboundHandler<ByteBuf>...
因为你没有做过任何的编码解码,所以你的泛型是ByteBuf,这样你肯定可以使用messageReceived来接收到消息了。如果还不明白,建议你去看一下netty自带的sample,里面有个求阶乘的例子,server和client传递的BigInteger对象,所以就用的是
SimpleChannelInboundHandler<BigInteger>。没有经过任何编码解码的那就肯定是ByteBuf对象。
参考技术A 正如javadoc所说的,一个channel给用户提供下面四个服务:
1. 当前channel的状态,是open还是connected
2. 这个channel的一些配置信息
3. 这个channel所支持的一些io操作
4. 和这个channel相关联的ChannelPipeline
Channel中所有的操作都是异步的,当发生io操作的时候将会返回一个
ChannelFutrue的接口,在这个里面可以处理操作成功、失败、取消后的动作。
在netty里面,随着Channel的创建者的不同可以分成不同的一些channel,比如它可以被ServerSocketChannel的accept之后,返回一个SocketChannel,这个SocketChannel的parent就是ServerSocketChannel了,在netty里面应该有三类Channel,这个会在以后详细讲解。
Channel里面的interestOps的和NIO里面的SelectionKey有点类似,这个会在以后进行详细的说明。

Netty项目使用经验总结

目录

 3.服务器内存溢出问题

5.服务器异常捕获

6.Netty使用ProtoBuf


 3.服务器内存溢出问题

关于Netty服务器端接收消息,因为最底层入口是从这个函数:

channelRead0(ChannelHandlerContext ctx, String msg)

来接收客户端消息的(从NettyServer代码也能看出来)

客户端每次

以上是关于Netty中的channelRead和messageReceived的区别的主要内容,如果未能解决你的问题,请参考以下文章

Netty ChannelRead 方法

Netty中为啥执行channelReadComplete但是不执行channelRead

netty channelhandleradapter 是否去了channelread方法

channelRead对于耗时业务逻辑处理的优化

Netty之非阻塞处理

如何知道 Bytebuf 是从 Netty4 中的哪个通道读取的?