- 1.接受消息和接受链接的逻辑类似,其是调用AbstractNioUnsafe的内部类NioByteUnsafe的read方法。首先判断根据条件判断当前数据是否需要读取,如果不需要则设置readPending=false。因为如果为true则代表当前正在等待read事件或者正在读取。
- 2.重置我们的接受缓冲的处理器RecvByteBufAllocator.Handle。
- 3.初始分配给我们1024字节大小的接受消息的bytebuf,然后我我们利用该bytebuf从我们的socketchannel获取数据。
- 4.每次统计当前获取的字节大小,如果小于等于0则跳出循环,如果读取的字节数小于0则代表channel有异常
直接关闭。 - 5.如果正常读取到数据我们会统计读取的次数totalMessages,如果读取的次数大于maxMessagePerRead则也会跳出循环。
- 6.每次读取到一部分数据都是传递给channelRead方法,所以我们需要一个handler(ByteToMessageDecoder)来帮我们累计一个完整的数据。
- 7.再整个数据读取完毕之后会分别调用ChannelReadComplete()来设置readPending=true。
- 8.最后就是如果我们的readPending=false且不是autoread则代表我们取消注册read事件,因为我们不支持自动读且当前的读已经读完了 所以不能注册read事件。
netty接收消息原理
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 哪里描述不正确望指正. 欢迎转载大纲 数据容器的选择 Java NIO使用ByteBuffer.classNett...
- 本文是Netty文集中“Netty 源码解析”系列的文章。主要对Netty的重要流程以及类进行源码解析,以使得我们...