文档章节

netty5.0总结

 天下杰论
发布于 2014/11/13 12:02
字数 680
阅读 107
收藏 1
5.0以后内容:
     netty初体验,netty是个高性能的java通信框架,至于oio还是nio,它都支持,核心概念:基于事件驱动的架构,很容易让人联想到观 察者模式。它提供的数据结构为ByteBuf,这个是个什么东西?可以理解为:一个数据的载体,比如我接收和发送的消息,得到的都是ByteBuf对象, 它是对字节流的一个高度抽象化,并提供比NIO的ByteBuffer更多的功能,不至于同一个buffer中经常操作,flip,compact等方 法,更为简洁实用,同时如果客户端和服务端都采用java,那么它也可以提供自定义的object类型的数据载体。netty官方提供的example很 多,客户端和服务端如何写,照猫画虎即可。
     把握住两个关键点即可:*handler和传递的内容(即发送和接收的消息),*handler里面包含具体事件的触发方法:比如 exceptionCaught方法(出现异常时)、messageReceived方法(接收消息时)、channelActive(连接刚建立时)等 方法,采用最新的SimpleChannelInboundHandler 这个handler,T可以为自定义的任何对象,如果不需要自定义对象,那么传递Object即可,如果是自定义对象或者java基本类型或String 类型,那么必须得有个大前提:客户端和服务端都必须得进行一定的转换,换句话说:我的客户端和服务端必须都得用netty的相关API封装一次(具体看 netty例子)。如果不是自定义对象,而传递的是Object,那么在收到消息时,必须进行强制转换为ByteBuf对象,通过 ChannelHandlerContext进行发送,这个时候发送的是ByteBuf对象,如果是自定义对象,那么 ChannelHandlerContext.write(自定义对象)即可,同时必须调用flush方法才能发送出去,也可调用 wirteAndFlush(自定义对象)方法。
      
     深究了两天netty,得出的结论是:如果客户端和服务端都基于netty,那么互发消息,各种类型协议消息,基本都不成问题。官方example很多,照猫画虎,自定义随便玩

     但是,如果我只用netty的服务端,而客户端是一个纯粹的socket,比如其它语言的客户端,比如纯粹只是一个硬件,进行socket连接等等,即不采用netty的API,而且不是java语言,那么就会有一些问题。 

ReferenceCountUtil.release(msg);这是netty提供的一个释放ByteBuf内存的方法,如果不采用这个,直接调用ByteBuf.release方法也可以,如果你调用了writeAndFlush方法。

© 著作权归作者所有

共有 人打赏支持
粉丝 54
博文 443
码字总数 23611
作品 0
沈阳
项目经理
私信 提问
Netty服务器在线上运行了几天,就会出现大量的TIME_WAIT,之后客户端就怎么都连接不上了,服务端的通道总是拒绝连接

netty5.0 服务端运行一段时间后,产生大量的timeout,客户端总是连接不上 客户端是gprs连接

landlore
2016/09/21
1K
7
Android 端用netty5.0要使用到哪些 jar包,求解,用all的话太大了

Android 端用netty5.0要使用到哪些 jar包,求解,用all的话太大了

有毛的汉子
2015/03/31
1K
2
Netty5.0 用在android 上

12-14 17:28:38.906 23413-24753/com.dami.tkhxs I/NettyClient: connect failed Unable to create Channel from class class io.netty.channel.socket.nio.NioSocketChannel reconnect dela......

uglyApple
2016/12/14
261
1
为什么netty官网上并没有netty5.0?

种豆南山下920
2016/05/27
3.8K
1
七 netty学习之 boss线程池,worker线程的生命周期

netty的线程模型 1. bossGroup线程组 如果绑定了一个端口的话,那么只有一条线程来处理所有到来的请求.即使这个线程组里可能不止一条线程如果绑定了两个端口的话,那就有两条线程new EventLoop...

plugin
2015/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
45分钟前
1
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
2
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部