netty SimpleChannelInboundHandler类继承使用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

继承一个SimpleChannelInboundHandler来实现我们的Client,我们需要重写其中的三个方法:

package NettyDemo.echo.handler;import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.util.CharsetUtil;
@Sharable
public class EchoClientHandler extends SimpleChannelInboundHandler<ByteBuf> {  /**   *此方法会在连接到服务器后被调用 * */  public void channelActive(ChannelHandlerContext ctx) {    ctx.write(Unpooled.copiedBuffer("Netty rocks!", CharsetUtil.UTF_8));  }  /**   *此方法会在接收到服务器数据后调用 * */  public void channelRead0(ChannelHandlerContext ctx, ByteBuf in) {    System.out.println("Client received: " + ByteBufUtil.hexDump(in.readBytes(in.readableBytes())));  }/**   *捕捉到异常 * */  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {    cause.printStackTrace();    ctx.close();  }}

    其中需要注意的是 channelRead0()方法,此方法接收到的可能是一些数据片段,比如服务器发送了5个字节数据,Client端不能保证一次全部收到,比如第一次收到3个字节,第二次收到2个字节。我们可能还会关心收到这些片段的顺序是否可发送顺序一致,这要看具体是什么协议,比如基于TCP协议的字节流是能保证顺序的。

    还有一点,在Client端我们的业务Handler继承的是SimpleChannelInboundHandler,而在服务器端继承的是ChannelInboundHandlerAdapter,那么这两个有什么区别呢?最主要的区别就是SimpleChannelInboundHandler在接收到数据后会自动release掉数据占用的Bytebuffer资源(自动调用Bytebuffer.release())。而为何服务器端不能用呢,因为我们想让服务器把客户端请求的数据发送回去,而服务器端有可能在channelRead方法返回前还没有写完数据,因此不能让它自动release。


转载于:https://my.oschina.net/u/1013711/blog/383006

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高中关于人工智能方面的课题_如何看待计算机专业开始设置人工智能课程

首先&#xff0c;当前计算机专业当中设置与人工智能相关的课程是一个必然的趋势&#xff0c;随着人工智能技术开始逐渐实现落地应用&#xff0c;未来计算机相关专业的课程当中&#xff0c;人工智能课程的比重也会逐渐提升&#xff0c;而且一定要重视这些课程&#xff0c;这对于…

Linux命令-目录处理命令:mkdir

mkdir /tmp/beijing mkdir -p /tmp/shijiazhuang/yuhuaqu 一条命令可以同时创建父目录和子目录 mkdir /tmp/beijing/chaoyangqu /tmp/beijing/dongchengqu /tmp/beijing/tongzhouqu 同时创建多个目录

tableau 倒序都倒了_Tableau优秀作品拆解复刻01-是时候终结瘘管病了

写在最前面&#xff1a;这个复刻系列是学习tableau官网库中的优秀作品。学习他们亮眼图表的制作细节&#xff0c;仪表板的排版&#xff0c;颜色的搭配以及交互。tableau库的链接&#xff1a;优秀作品都在这里展示。库​public.tableau.com1 整体布局 颜色&#xff1a; 采用橙色…

目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结(转)

做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧&#xff0c;它可以将数据以键值对儿的形式储存起来&#xff0c;取值的时候通过KEY就可以直接拿到对应的值&#xff0c;非常方便。在Objective-C语言中 词典对象就是做这个事情的&#xff0c;不过在同一个词典对象中…

android string数组转json_移动端开发基础【20】pages.json的配置项pages

uni-app项目是通过pages节点配置应用由哪些页面组成&#xff0c;pages节点接收一个数组&#xff0c;数组每个项都是一个对象&#xff0c;其属性值如下&#xff1a;(1) 属性&#xff1a;path类型&#xff1a;String描述&#xff1a;配置页面路径(2) 属性&#xff1a;style类型&a…

Ubuntu Server 分区案例

为什么80%的码农都做不了架构师&#xff1f;>>> 只有一台服务器&#xff0c;配置硬盘1TB&#xff0c;内存4GB&#xff0c;既要做开发服务器&#xff0c;又要做Web服务器和数据库服务器&#xff0c;分区如下&#xff1a; 挂载点大小分区格式 /boot512MBext4/20GBext…

360网络修复工具_为什么大家都在骂360,但是360依旧是很强?

相信很多小伙伴也多多少少的听说过就是不要随便装360&#xff0c;因为装上360会如何如何。这些人往往说起来也是很有道理&#xff0c;我在以前上学的时候也是这么觉得&#xff0c;但是后来工作之后发现并不是这样。360先说一下360安全卫士的功能&#xff0c;有系统优化、垃圾清…

Java运行时内存

对于java程序员来说&#xff0c;并不必显示地对内存进行管理&#xff0c;一切都交给java虚拟机去做吧&#xff0c;而且&#xff0c;你也不一定做得比java虚拟机来得专业。好像所有内存管理都交给虚拟机去做就万事大吉了&#xff0c;但是&#xff0c;事实有时并非如此&#xff0…

中班机器人上课视频_家委会:出班费买智能扫地机器人,不用家长搞卫生了,莫名其妙...

【01】原来大家上学&#xff0c;几乎是很随意的样子&#xff0c;有人至没上过幼儿园&#xff0c;有的上过半年&#xff0c;然后就直接升小学。可即使是升小学了&#xff0c;家长也不会管&#xff0c;全凭自己了。可如今随着社会的发展&#xff0c;父母们都非常重视孩子们的学习…

Powerful Sleep(神奇的睡眠-睡眠生物钟的秘密:如何睡得更少却睡得更好)阅读笔记...

睡眠机制 我们活着的时候&#xff0c;大脑会产生脑电波。脑电图仪器通过贴在人头上的一些电极读出脑电波的活动&#xff0c;然后把活动用图表显示出来。 睡眠过程可以分为5个过程&#xff0c;划分依据与大脑发出的脑电波类型。 当人清醒时&#xff0c;大脑发出β脑电波&#xf…

ue4集合类型_UE4粒子系统渲染管线概述

本文基于UE4版本4.25.3&#xff0c;对Cascade粒子系统的移动端渲染管线进行简单的概括和描述。Game Thread部分粒子系统Actor被Spawn&#xff08;或所在的Level被加载&#xff09;的时候&#xff0c;UParticleSystemComponent注册和初始化&#xff0c;并通过CreateSceneProxy函…

2、Sprite,SpriteBatch,Texture,TextureRegion的初步认识

昨天搭建了环境&#xff0c;今天就初步接触这个4个控件&#xff08;Sprite&#xff0c;SpriteBatch&#xff0c;Texture&#xff0c;TextureRegion&#xff09; 1、SpriteBatch 这个吗&#xff0c;我没有看api文档&#xff0c;偶是直接看土豆的博客学习的&#xff0c;我看了代码…

莒南机器人_莒南42项重点建设项目公布!一定有你关注的

10日&#xff0c;县发改局公布莒南县2020年重点建设项目表&#xff01;涉及工业、服务业、基础设施、现代农业等行业&#xff0c;共42项。详↓工业1、山东钢铁集团永锋临港有限公司临港先进优特钢产业基地一期项目投资方&#xff1a;山东钢铁集团永锋临港有限公司建设地点&…

配置Mysql实现主从复制与读写分离

环境说明 主从复制使用mysql自带的master与slave机制&#xff1b;读写分离使用mysql-proxy实现&#xff01; 有服务器三台&#xff1a;s1,s2,s3。 s1为web服务器&#xff0c;装有httpd&#xff0c;php&#xff0c;mysql&#xff0c;mysql-proxy。 s2为主数据库服务器&#xff0…

arduino 土壤温湿度传感器_嫌arduino太贵?太大?试试ATTINY85!DIY温湿度计入门级教程...

ATTINY85做主控&#xff0c;OLED显示的温湿度计。简介&#xff1a;通过Arduino开发环境&#xff0c;对ATTINY85进行编程&#xff0c;利用DH11温湿度传感器&#xff0c;在SSD1306(128*64)OLED显示屏上显示温度和湿度。材料&#xff1a;ATTINY85DHT11SSD1306 (12864 OLED)电池盒纸…

认识事件冒泡和事件捕获

一.事件冒泡就是多个元素同时响应了同一个事件&#xff0c;前提是这些元素都绑定了这一个事件。这只是我的定义&#xff0c;感觉好理解些。 称它为冒泡&#xff0c;是因为事件会按照DOM元素的层次结构依次执行&#xff0c;就像水泡一样不断浮向顶端。所以称之为事件冒泡。 这个…

计算abc=a!+b!+c!

根据题目&#xff0c;即求abca!b!c! 下面我们设计算法&#xff1a; 设三位数为n,取出每一位数分别放在a、b、c中 通过定义形参&#xff0c;求每位数的阶乘&#xff0c;通过函数返回值返回 主函数中&#xff0c;调用返回值&#xff0c;每一位的阶乘相加与该三位数比较&#xff0…

docker选择安装位置_自定义WSL的安装位置,别再装到C盘啦

本文使用 Zhihu On VSCode 创作并发布为了用docker,今天才决定更新到win10 2004打算另外装一个WSL2的发行版折腾docker和GPU&#xff0c;发现之前装WSL到非系统盘的教程找不到了。现在网上也没找到有这方面的东西&#xff0c;干脆自己写一个留作记录吧~WSL(Windows Subsystem f…

[讨论帖] 程序员如何赚外快?

昨天的一篇文章一个程序员如何快速赚到一百万&#xff1f;引起了大家的热门讨论&#xff0c;现在另开一个贴&#xff0c;讨论一下如何赚钱。 -------------------------- 挣外快需要的是大量的业余时间和强大的意志&#xff0c;如果你是个每天工作十几个小时天天累得像狗一样的…

求两个数的最大公约数和最小公倍数

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 [plain] view plaincopy #include <stdio.h> int main() { int a, b, num1, num2, tmp; printf("Input a & b:"); scanf("%d %d",&num…