当前位置: 首页 > news >正文

美澳居的网站谁做的/湖北网站seo设计

美澳居的网站谁做的,湖北网站seo设计,做网站国家大学科技园郑州,win7iis如何做网站简介 UDT给了你两种选择,byte stream或者message,到底选哪一种呢?经验告诉我们,只有小学生才做选择题,而我们应该全都要! 类型的定义 UDT的两种类型是怎么定义的呢? 翻看com.barchart.udt包&#xff0c…

简介

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<UdtChannel>() {@Overridepublic 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<UdtChannel>() {@Overridepublic 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!

http://www.lbrq.cn/news/1105867.html

相关文章:

  • 牡丹江信息网手机版招聘/百度seo关键词排名查询
  • 校园加盟网站建设/青岛百度网站排名
  • 购物网站开发总结报告/单页网站
  • wordpress爱视频/襄阳seo优化排名
  • 网站标题怎么做/全网营销型网站
  • 我想做个网站怎么弄/市场调研数据网站
  • 网上哪个网站教做西点/银川seo优化
  • 深圳哪几个区最繁华/上海搜索引擎优化1
  • 北京网站制作培训/关键词搜索推广
  • seo顾问是啥/天津短视频seo
  • 企业网站怎么做的更好/佛山百度关键词排名
  • 百度搜索推广方法/推广seo公司
  • 礼泉做网站/百度帐号登录入口
  • wordpress主题开发班/seo网络营销技术
  • 学院网站建设方案 网站内容/电子商务推广方式
  • 网站开发技术文档/北京十大营销策划公司
  • wordpress 4.4.1/高级seo课程
  • 政府网站平台安全建设/百度云盘资源搜索
  • 自己做的网站如如统计访问量/seo网络推广方法
  • 自己做app建网站/软件培训
  • 网站效果案例/网络服务器图片
  • 做车贷的网站/周口网站seo
  • node.js做企业网站/盘多多网盘搜索
  • 红岗网站建设/宁德市旅游景点大全
  • 网站seo策划/提升排名
  • 开发公司公安机构/北京搜索引擎优化主管
  • wordpress自定义侧边栏小工具/推广优化网站排名教程
  • 做营销型网站需要注意哪些点/百度搜索引擎下载
  • wordpress转github/sem和seo的关系
  • 设计比较有特色的网站/发布信息的免费平台
  • freertos任务调度关键函数理解
  • 【音视频协议篇】RTSP系列
  • Python Pandas读取Excel表格中数据并根据时间字段筛选数据
  • 【理财】为什么要进行资金预留
  • Java行为型模式---状态模式
  • Zara和网易云音乐仿写总结