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

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/
  最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
  欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

外媒称苹果踢掉京东方,因其改变OLED设计,还有合作的机会吗?个人建议,为了国家安全,国家应该把苹果手机和特斯拉踢出中国!不合作也无妨,向国内高端手机供货。难道国内还有人在用苹果吗?难以想象花大钱买个板砖。这个需要理性看待,苹果的订单或许并不华硕天选3游戏本i712700H3050Ti体验关于12代酷睿的信息想必各位都已经看到过很多了,新的架构着实带来了强劲动力,在显卡相同的情况下,12代酷睿在游戏帧数上也有一定增长。今年华硕更新了天选系列游戏本,让人激动的不光是有华为神秘部门曝光,华为的发展壮大与之有着密切关联在科技日发展新月异的今天,手机越来越成为人们日常生活中不可分割的一部分。中国手机的品质也在逐步与国际持平。其中华为作为国产品牌,是不得不说的一个。经过几十年的发展,华为已经一跃成为销量暴跌厂商砍单,这届年轻人为什么不愿换手机了?一佳之言夏天快到了,手机厂商却集体进入寒冬。没钱,没坏,还能用。看上去,年轻人不再像过去那样有着换机焦虑了。不久前,年轻人为什么不愿换手机的话题引发热烈的讨论和用户的共鸣价格贵没有变革式创高端智能粉丝经济两轮电动车也卷起来了稿源中关村在线电动车新国标已经实施已经进入第三年,随着电动车行业标准的提升与中小企业的清退,两轮电动车也逐渐走上了正规军的道路。不仅对于消费者而言产品更加安全可靠,同样对于行业来说诺基亚手机官方改名?我们的青春再也回不去了中国是公认全球智能手机第一大国,从传统手机到智能手机,国内手机厂商不断更替,随着近年来国产品牌的崛起,一众优秀的国产企业不断发展壮大,获得广大消费者的认可。不过这些都是过去式了,由阿里巴巴持有阿里健康股份比例增至57。06傅苏颖中国证券报中证网中证网讯(记者傅苏颖)5月22日晚间,阿里健康发布公告称,云锋基金旗下InnovareTechLimited5月20日就持有的阿里健康部分股份按比例向基金的有科创板芯片指数即将推出,中芯国际领衔5大权重股为及时反映科创板上市证券的表现,为市场提供多维度投资标的和业绩基准,上海证券交易所和中证指数有限公司表示,将于6月13日正式发布上证科创板芯片指数,彰显硬科技示范效应。经流动性筛选2022年6184000元左右手机哪些值得买?一篇到位!!!如果说2021年,4000元左右的手机一只脚迈入了高端机的行列,那进入了2022年,多款4000元机型已经完全迈入了高端机(旗舰)行列。所以2022年预算有限但又想入华为手机鸿蒙系统3。0即将更新,届时分布式后台和服务流转更强大华为手机鸿蒙系统经过了几次版本升级之后,距离3。0也越来越近了,届时将更新分布式后台和服务流转功能个,真正实现万物互联。服务流转功能可以将两台鸿蒙手机之间的应用相互流转,最厉害的是发了条云手机的视频,在近百条评论中网友最关心这三点云这个事,在数字经济中越来越来重要。如果说过去,我们把用电量当作衡量工业社会发展的重要指标那么现在,我们大概可以用云量当作衡量数字经济发展的重要指标。用户以云手机和笔记等产品为载体
Github标星3。8K,基于SpringBoot框架和SaaS模式ERP软件源码分享在今天逛GitHub的时候,无意中发现一个基于SpringBoot框架和SaaS模式好用的ERP软件,觉得蛮不错的,特意分享给头条上的粉丝朋友们,接下来我会给大家介绍这个项目的一些京东毫秒级热key探测框架设计与实践,已实战于618大促在拥有大量并发用户的系统中,热key一直以来都是一个不可避免的问题。或许是突然某些商品成了爆款,或许是海量用户突然涌入某个店铺,或许是秒杀时瞬间大量开启的爬虫用户,这些突发的无法预企业级微服务框架,前后端分离基于SpringCloud源码分享基于SpringCloud的企业级微服务框架(用户权限管理,配置中心管理,应用管理,。),其核心的设计目标是分离前后端,快速开发部署,学习简单,功能强大,提供快速接入核心接口能力,基于SpringCloud微服务化开发脚手架平台源码免费分享SpringCloud微服务化开发平台,具有登录,菜单以及按钮权限校验,快速生成脚手架,统一的异常和日志处理,使用elasticsearch6。3的数据存储及简单的搜索功能。目前升你知道Redis可以实现延迟队列吗?推荐阅读基于springboottiooauth2。0前端vuede超轻量级聊天软件分享基于SpringCloud微服务化开发脚手架平台源码免费分享基于springboot2。0跟从100G网卡看未来数据中心发展趋势网卡,即网络接口控制器,也被称为网络适配器或局域网接收器,一般是安装在计算机或服务器上,通过网络与另一台计算机服务器或其他网络设备进行通信,目前网卡种类繁多,分类也较为多样,可按照10G国产rdma网卡大数据应用特点目前,5G网络人工智能工业互联网物联网为代表的新基建大力推动实施,企业用户个人用户以及整个社会体系应用所产生的数据再次呈井喷式爆发,然而,传统网络的存储方法已难以满足日益繁多且高速一个基于JavaFX和Vertx的跨平台MySQL数据库管理工具源码分享这是一个基于JavaFX和Vertx的免费跨平台的数据库管理工具。关注转发本篇文章之后私信回复源码我给你发免费下载方式支持创建修改连接。基本表crud操作。支持创建修改表。支持重命OCP网卡助力整机柜交付或成未来数据中心发展主流随着5GAI应用普及带来数据量快速增长,数据中心规模的不断扩张,如何提高交付效率优化整体TCO,降低运维复杂度成为数据中心面临的主要挑战,而整机柜则以密度高交付快易维护投资回报高的基于Kong和Kubernetes的WebApi多版本解决方案一背景1。讲故事去年阿里聚石塔上的所有isv短信通道全部对接阿里通信,我们就做了对接改造,使用阿里提供的。netsdk。网址httpshelp。aliyun。comdocument国产四光口千兆以太网卡,性能领先同类产品随着互联网社会的高速发展,人们对于网络速度的需求越来越高,在计算机应用中,PCIe总线接口在一定程度上影响着网络的传输速度。在网络总线接口上,PCIe是继ISA和PCI总线之后的第