范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

netty系列之选byte还是选message?这是一个问题

  简介
  UDT给了你两种选择,byte stream或者message,到底选哪一种呢?经验告诉我们,只有小学生才做选择题,而我们应该全都要! 类型的定义
  UDT的两种类型是怎么定义的呢?
  翻看com.barchart.udt包,可以发现这两种类型定义在TypeUDT枚举类中。     STREAM(1),     DATAGRAM(2),
  一个叫做STREAM,它的code是1。一个叫做DATAGRAM,他的code是2.
  根据两个不同的类型我们可以创建不同的selectorProvider和channelFactory。而这两个正是构建netty服务所需要的。
  在NioUdtProvider这个工具类中,netty为我们提供了TypeUDT和KindUDT的六种组合ChannelFactory,他们分别是:
  用于Stream的:BYTE_ACCEPTOR,BYTE_CONNECTOR,BYTE_RENDEZVOUS。
  和用于Message的:MESSAGE_ACCEPTOR,MESSAGE_CONNECTOR和MESSAGE_RENDEZVOUS。
  同样的,还有两个对应的SelectorProvider,分别是: BYTE_PROVIDER 和 MESSAGE_PROVIDER. 搭建UDT stream服务器
  如果要搭建UDT stream服务器,首先需要使用NioUdtProvider.BYTE_PROVIDER来创建NioEventLoopGroup:         final NioEventLoopGroup acceptGroup = new NioEventLoopGroup(1, acceptFactory, NioUdtProvider.BYTE_PROVIDER);         final NioEventLoopGroup connectGroup = new NioEventLoopGroup(1, connectFactory, NioUdtProvider.BYTE_PROVIDER);
  这里,我们创建两个eventLoop,分别是acceptLoop和connectLoop。
  接下来就是在ServerBootstrap中绑定上面的两个group,并且指定channelFactory。这里我们需要NioUdtProvider.BYTE_ACCEPTOR: final ServerBootstrap boot = new ServerBootstrap();             boot.group(acceptGroup, connectGroup)                     .channelFactory(NioUdtProvider.BYTE_ACCEPTOR)                     .option(ChannelOption.SO_BACKLOG, 10)                     .handler(new LoggingHandler(LogLevel.INFO))                     .childHandler(new ChannelInitializer() {                         @Override                         public void initChannel(final UdtChannel ch) {                             ch.pipeline().addLast(                                     new LoggingHandler(LogLevel.INFO),                                     new UDTByteEchoServerHandler());                         }                     });
  就这么简单。 搭建UDT message服务器
  搭建UDT message服务器的步骤和stream很类似,不同的是需要使用NioUdtProvider.MESSAGE_PROVIDER作为selectorProvider:         final NioEventLoopGroup acceptGroup =                 new NioEventLoopGroup(1, acceptFactory, NioUdtProvider.MESSAGE_PROVIDER);         final NioEventLoopGroup connectGroup =                 new NioEventLoopGroup(1, connectFactory, NioUdtProvider.MESSAGE_PROVIDER);
  然后在绑定ServerBootstrap的时候使用NioUdtProvider.MESSAGE_ACCEPTOR作为channelFactory: final ServerBootstrap boot = new ServerBootstrap();             boot.group(acceptGroup, connectGroup)                     .channelFactory(NioUdtProvider.MESSAGE_ACCEPTOR)                     .option(ChannelOption.SO_BACKLOG, 10)                     .handler(new LoggingHandler(LogLevel.INFO))                     .childHandler(new ChannelInitializer() {                         @Override                         public void initChannel(final UdtChannel ch)                                 throws Exception {                             ch.pipeline().addLast(                                     new LoggingHandler(LogLevel.INFO),                                     new UDTMsgEchoServerHandler());                         }                     });
  同样很简单。 Stream和Message的handler
  不同的UDT类型,需要使用不同的handler。
  对于Stream来说,它的底层是byte,所以我们的消息处理也是以byte的形式进行的,我们以下面的方式来构建message: private final ByteBuf message; message = Unpooled.buffer(UDTByteEchoClient.SIZE);         message.writeBytes("www.flydean.com".getBytes(StandardCharsets.UTF_8));
  然后使用ctx.writeAndFlush(message)将其写入到channel中。
  对于message来说,它实际上格式对ByteBuf的封装。netty中有个对应的类叫做UdtMessage: public final class UdtMessage extends DefaultByteBufHolder
  UdtMessage是一个ByteBufHolder,所以它实际上是一个ByteBuf的封装。
  我们需要将ByteBuf封装成UdtMessage: private final UdtMessage message; final ByteBuf byteBuf = Unpooled.buffer(UDTMsgEchoClient.SIZE);         byteBuf.writeBytes("www.flydean.com".getBytes(StandardCharsets.UTF_8));         message = new UdtMessage(byteBuf);
  然后将这个UdtMessage发送到channel中: ctx.writeAndFlush(message);
  这样你就学会了在UDT协议中使用stream和message两种数据类型了。 总结
  大家可能觉得不同的数据类型原来实现起来这么简单。这全都要归功于netty优秀的封装和设计。
  感谢netty!
  本文的例子可以参考:learn-netty4 本文已收录于 http://www.flydean.com/40-netty-udt-support-2/
  最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
  欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

Win10电脑怎么给硬盘分区?Win10电脑怎么给硬盘分区?其实借助易我分区大师工具,分区就变得非常简单,怎么分都不会有错!当我们的电脑安装好后,里面只有一个或者两个分区,这样就很不方便管理电脑里面的各项文件资iPhone系统省电设置使用iPhone的用户会经常为iPhone手机电量不够用而发愁,大家都知道iPhone之所以好用是因为系统,那么iphone系统怎么设置才能最省电又不影响正常使用呢?给大家分享一下桌面上只有一个箭头,只有一个光标怎么办?桌面上只有一个箭头,只有一个光标怎么办?友情提醒数据无价,谨慎操作。电脑上有重要,最好先备份,再操作。桌面上只有一个箭头,只有一个光标,怎么办?方法一先进PE,用桌面上的启动修复工防水防摔还有实体按键,聊天视频都支持,2021版大哥大体验大家还记得曾经风光一时的大哥大吗?有板砖这么大,还带有天线,同时还是防身利器。那么到了2021年,如果有手机厂家说也要推出一款升级版的大哥大,具有大哥大的防身功能,还能连WIFI连富士康重返大陆,引进光刻机买下晶圆厂,郭台铭想明白了?海外建厂失败的郭台铭,重返大陆!今年苹果开始对iPhone13进行提高产能,代工这一块国内厂商依然是表现出色,但是与往年不同的是,这一次可不单单是富士康,就是和硕立讯精密都很忙活,三电全部纳入保障范围新能源汽车专属保险快步走来8月4日,中国保险行业协会发布中国保险行业协会新能源汽车商业保险专属条款(2021版征求意见稿)和中国保险行业协会新能源汽车驾乘人员意外伤害保险示范条款(2021版行业征求意见稿)2021年需要学习Python的自动化测试框架有哪些?你知道吗?从某种程度来讲,自动化测试是未来的发展趋势,它可以很好地节省时间成本和人力成本,提高工作效率。那么Python自动化测试框架有哪些?相信很多人都不太了解,我们一起来看看吧。一Rob选张勇当接班人或是马云第一大失误!财务不能当一把手在马云的多年经营之下阿里巴巴的发展势不可挡,凭借马云领先那个年代数年的思维,阿里巴巴一跃成为中国互联网企业中的绝对巨头,它的一举一动都会引得多方瞩目。2019年马云选择张勇作为接班三星GalaxyZFold3,来了这几天的手机圈格外热闹,从明天开始,我们就将在三天里迎来三款安卓旗舰手机。热闹之余还发生了一些小插曲,一些新机的详细信息遭到了曝光,可以说是提前开完了发布会。三星GalaxyZFo小米MIX4发布!屏下摄像头首发骁龙888Plus,只要4999起期待已久的小米MIX4发布会终于来了,采用了CUP工艺来隐藏前置镜头,让镜头隐藏的更好,自拍的效果也不错。屏幕采用了一块6。67英寸的柔性微曲屏,采用了一体化陶瓷机身,因为工艺的升长虹电视在哪看电视直播?收下这份指南,让你分分钟搞定对于大多数人来说,打开电视去寻找电视直播来看是非常麻烦的,那么怎么可以直接打开长虹电视就可以免费看电视直播呢?今天给大家分享一个宝藏方法指南,教你分分钟搞定,打开电视就能免费看!第
从2699元跌至2299元,65W256GB,超值双曲面旗舰诞生纵观如今智能手机市场中的高端产品,基本上这一类的产品都拥有着一个共同的特点,就是在屏幕部分皆是使用了曲面屏设计,也是不知道是从什么开始的,双曲面屏已经是成为了高端旗舰的标配。而为了四川比特币矿场5年之间为贫困山区带来了什么?CommunityJun最近与四川和云南从事比特币开采的小型矿工进行了沟通。沟通内容如下Q您能简要介绍一下您的采矿队在哪里吗?A在四川和云南的山区,有些靠近大型电站,交通位置优越,买手机的朋友不妨再等等,9月即将发布的三款新机很给力本月可谓是妥妥的新机发布大月,各大厂商新机是一款接着一款登场,生怕在激烈的竞争中落了伍,一时间许多小伙伴也是有了购机欲望,不过今天笔者想说的是,最近有购机想法的朋友可以再等等,原因远超苹果调查显示小米换机忠诚度最高如今手机产品更新速度快,用户换机的速度也跟着加快了起来,日前,QuestMobile公布了今年6月份智能手机用户的品牌换机去向数据。在其公布的数据中,华为苹果OPPOvivo小米五windowscmd命令汇总(建议收藏)目录文件与目录命令网络相关命令进程相关命令平时我们操作较多的是linux,反而对windows相关的命令不熟悉,下面是我总结的一些命令。有不清楚的,也可以在评论区告知我。cmd使用特斯拉的强大对手!LucidAir新增高性能版长续航版续航超832公里佰咖汽车新能源新车资讯我们从外媒获悉,电动品牌Lucid新增两款车型,DreamEdition车型为消费者提供两种选择,分别是Performance高性能和Range长续航版本。据小米红米Note10Pro怎么样?小米红米Note10Pro(6GB128GB5G版)最新价格是1599元,如果你正想入手一台好点的手机的话,我想这会是其中一个很好的选择!上市时间为2021年05月26日。这款手机自拍达人看过来vivos10pro使用评测我问你,人生最珍贵的是什么?你说是时间?我说,是记忆。而记录自己,是最容易被忽略的。那,记录真实和记录最好,你又会选什么呢?我想,既然是为自己记录,应该是最好状态的自己。那么问题来台积电涨价影响iPhone13定价走高?分析人士称可能性不大8月27日消息,由于台积电芯片代工价格上调,可能影响iPhone13的定价走高,因为iPhone13最重要的芯片在台积电生产。此前,业内推测苹果iPhone13系列的定价和上一代相苹果公司造iPhoneSE的目的,不仅是卖手机,而是要软硬通吃了我们都知道苹果公司同时销售几种不同的iphone手机,但SE型号是迄今为止最便宜的,虽然价格如此便宜,但是它依然拥有比大多数几千元的安卓机更强大的处理能力。那么为什么苹果可能制造出OPPO官网买手机货不对版,客服回复宣传有误不予退货?OPPO公司虚假宣传,购买的产品与宣传不符,性能缩水一半!陈先生向南都爆料称,其在OPPO官方旗下的欢太商城买了一部OPPO手机,出现货不对板的情况。而OPPO官方客服回复称宣传有